CakePHP расширяет форматирование валюты

#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» для выполнения чего-либо.