#php #cakephp #formatting
#php #cakephp #форматирование
Вопрос:
Мне нужно расширить помощник number, чтобы включить другие валюты. Используя функцию «addFormat» в number helper, я создал новый «CurrenciesHelper» для добавления этих валют.
<?php
class CurrenciesHelper extends NumberHelper {
Я знаю, что мне нужно сделать возможным, чтобы этот помощник немедленно запустил эту функцию. Чего мне не хватает, чтобы содержать это, чтобы оно запускалось и добавляло этот формат?
$this->Number->addFormat('CAD', array(
'before'=>'$',
'after' => false,
'zero' => 0,
'places' => 2,
'thousands' => '.',
'decimals' => ',',
'negative' => '()',
}
Комментарии:
1. Зачем расширять помощник? Почему бы просто не
addFormat()
использоватьcurrency()
— book.cakephp.org /#!/view/1453/валюта2. Потому что у меня должен был быть помощник, добавляющий все нужные мне форматы (6 валют) вместо необходимости ‘addFormat ()’ в каждой строке, в которой я использую currency. Идея состоит в том, чтобы добавить вспомогательный параметр «Валюты» и заставить его добавить их все к доступным валютам.
Ответ №1:
Начиная с CakePHP 2.1, вам не нужно расширять помощник, чтобы сделать это. NumberHelper
было повторно учтено в CakeNumber
классе. Если вы пройдетесь по коду, то увидите, что форматы теперь хранятся в виде статического массива.
Это помогает нам настраивать форматы валют внутри app/Config/core.php
, например, следующим образом:
App::uses( 'CakeNumber', 'Utility' );
CakeNumber::addFormat(
'CAD',
array(
'before' => '$ ', 'after' => false,
'zero' => 0, 'places' => 2, 'thousands' => '.',
'decimals' => ',', 'negative' => '()', 'escape' => true
)
);
// ... and any more definitions to follow.
Как только ваши определения валюты станут частью базовой конфигурации, вы сможете использовать их в любом представлении, используя NumberHelper
like $this->Number->currency( $c, 'CAD' )
.
Комментарии:
1. Я предпочел включить это в свой загрузочный файл. Пожалуйста, прокомментируйте, если считаете, что я не прав. Кроме того, я добавил эту строку:
CakeNumber::defaultCurrency('ARS');
Ответ №2:
ПРЕДЫДУЩИЙ ОТВЕТ ИЗМЕНЕН: из-за положения функций, постфактум. Пришлось изменить на:
function __beforeRender(){
}
Вызывало перезапись других пользовательских валют.
Инкапсулируя его в функцию построения, он запускается во вспомогательной конструкции. Я был уверен, что включил родительский конструктор на всякий случай.
function __construct() { parent::__construct(); // code goes here }
Комментарии:
1. Отрицательный отзыв: это не отвечает на вопрос, и оно устарело, и это также не «способ cakephp» для выполнения чего-либо.