我在想如果有内置的方式来使用Twig模板系统输出可读的文件大小。说我在我的模板是这样的:使用Twig模板系统的可读文件大小
<p>This limit is currently set to {{ maxBytes }}</p>
我怎么能格式化maxBytes
显示类似30 GB
?
我在想如果有内置的方式来使用Twig模板系统输出可读的文件大小。说我在我的模板是这样的:使用Twig模板系统的可读文件大小
<p>This limit is currently set to {{ maxBytes }}</p>
我怎么能格式化maxBytes
显示类似30 GB
?
有几种方法你可以去实现这个目的:
1)得到一个枝杈扩展将处理它。一个像这样的:https://github.com/BrazilianFriendsOfSymfony/BFOSTwigExtensionsBundle
启用后你会只是做:
{{ maxBytes|bfos_format_bytes }}
而且这会给你想要的东西。
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
或者,只需要创建一个树枝延伸:
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 }}
要读取操作系统确实使用1000(KiB MiB GiB TiB)而不是1024 – Cassiano 2016-06-30 16:50:18
请注意,KiB指的是KibiByte 1 KiB = 1024 B,KB指的是KiloByte为1KB = 1000字节。基洛总是代表国际体系单位的“时代千人”。另一方面,许多软件开发人员(即使是很熟悉的操作系统)都会混合所有这些单元,而不考虑公认的定义。 – 2017-09-06 13:23:09
据我所知是没有定义的函数/过滤器来做到这一点。你唯一的解决方案是[扩展树枝](http://twig.sensiolabs.org/doc/advanced.html)。 – cheesemacfly 2013-03-07 20:50:24