2013-03-07 3 views
5

Twigテンプレートシステムで読み込み可能なファイルサイズを出力する方法が組み込まれているのだろうかと思います。Twigテンプレートシステムで読み込み可能なファイルサイズ

<p>This limit is currently set to {{ maxBytes }}</p> 

どのようにフォーマットすることができmaxBytes30 GBのようなものを表示するには:私は私のテンプレートでは、このようなものを持っていると言いますか?

1)あなたのためにそれを処理する小枝の拡張子を取得:

+1

私の知る限り、これを行うには定義された関数/フィルタはありません。あなたの唯一の解決策は[twigを伸ばす](http://twig.sensiolabs.org/doc/advanced.html)です。 – cheesemacfly

答えて

18

は、あなたがそれを達成するに取り掛かることができますいくつかの方法があります。このようなワン:

{{ maxBytes|bfos_format_bytes }} 

をし、これが何をしたいあなたを与える:https://github.com/BrazilianFriendsOfSymfony/BFOSTwigExtensionsBundle

一度あなただけだろう有効。

2)エクステンション全体を追加したくない場合は、これを行うマクロを作成できます。それは次のようになります。

{% macro bytesToSize(bytes) %} 
{% spaceless %} 
    {% set kilobyte = 1024 %} 
    {% set megabyte = kilobyte * 1024 %} 
    {% set gigabyte = megabyte * 1024 %} 
    {% set terabyte = gigabyte * 1024 %} 

    {% if bytes < kilobyte %} 
     {{ bytes ~ ' B' }} 
    {% elseif bytes < megabyte %} 
     {{ (bytes/kilobyte)|number_format(2, '.') ~ ' KB' }} 
    {% elseif bytes < gigabyte %} 
     {{ (bytes/megabyte)|number_format(2, '.') ~ ' MB' }} 
    {% elseif bytes < terabyte %} 
     {{ (bytes/gigabyte)|number_format(2, '.') ~ ' GB' }} 
    {% else %} 
     {{ (bytes/terabyte)|number_format(2, '.') ~ ' TB' }} 
    {% endif %} 
{% endspaceless %} 
{% endmacro %} 

あなたが入れするとどのようにここではマクロを使用する場所についての詳細を読むことができます:http://twig.sensiolabs.org/doc/tags/macro.html

9

それとも、単に小枝拡張子作成:

ByteConversionTwigExtensionを。 PHP

<?php 
// src/AppBundle/Twig/Extension 

namespace AppBundle\Twig\Extension; 


class ByteConversionTwigExtension extends \Twig_Extension 
{ 


    /** 
    * Gets filters 
    * 
    * @return array 
    */ 
    public function getFilters() 
    { 
     return array(
      new \Twig_SimpleFilter('format_bytes', array($this, 'formatBytes')), 
     ); 
    }  

    public function getName() 
    { 
     return 'format_bytes'; 
    } 

    function formatBytes($bytes, $precision = 2) 
    { 
     $units = array('B', 'KB', 'MB', 'GB', 'TB'); 
     $bytes = max($bytes, 0); 
     $pow = floor(($bytes ? log($bytes) : 0)/log(1024)); 
     $pow = min($pow, count($units) - 1); 

     // Uncomment one of the following alternatives 
     $bytes /= pow(1024, $pow); 

     return round($bytes, $precision) . ' ' . $units[$pow]; 
    } 

} 

services.yml

parameters: 
    app.byte_conversion_twig_extension.twig.extension.class: AppBundle\Twig\Extension\ByteConversionTwigExtension 

services: 
    app.byte_conversion.twig.extension: 
     class: %app.byte_conversion_twig_extension.twig.extension.class% 
     tags: 
      - { name: twig.extension } 

Twighテンプレート:

{{ variable | format_bytes }} 
+0

OSが1024の代わりに1000(KiB MiB GiB TiB)を使用するように読むには – Cassiano

+0

KiBはKibiByte 1 KiB = 1024 Bを参照し、KBはKバイトを1KB = 1000バイトと参照することに注意してください。 Kiloは常に国際システムの単位で「times thousand」の略です。一方、多くのソフトウェア開発者(よく知られているOSでさえ)は、受け入れられた定義を無視して、これらすべてのユニットを混在させます。 –

関連する問題