Запеченные представления имеют ошибку vsprintf

Все представления, созданные выпечкой торта, которые вызывают 'format' => __(), возвращают следующую ошибку:

vsprintf(): Too few arguments [CORE/Cake/basics.php, line 565]

Я посмотрел basics.php, строка 565. Это часть функции __(). В документации по коду указано, что целью этой функции является «возврат переведенной строки, если она найдена; в противном случае — отправленное сообщение».

Речь идет о строке:

return vsprintf($translated, $args);

Я посмотрел vsprintf в документах php. vsprintf принимает 2 аргумента. Первый — это формат, а следующий — массив значений. ' Вызов функции в представлении:

'format' => __('Some Text',true);

Я отладил $translated и $args.

Я получаю $translated = 'Some Text' и $args = array((int)0=>true).

Из того, что я вижу, cakephp передает правильное количество аргументов vsprintf.

Как исправить эту ошибку, или это баг?

Что я пробовал, что приводит к исчезновению ошибки: измените вызов функции на 'format' => __('Some Text') - опустив true. Что приводит к тому, что функция просто возвращает $translated, пропуская вызов vsprintf().


person Jose    schedule 18.05.2013    source источник
comment
Я только что заметил, что вызов __(), который не работает, является частью кода разбивки на страницы, созданного выпечкой торта, и выглядит как «формат» => __('Страница %page% из %pages%, показывая %current% записей от общего количества %count%, начиная с записи %start%, заканчивая %end%', true). Вызовы __(), которые действительно работают, будут больше похожи на то, что я использовал в качестве примера выше: __('some text',true) работает просто отлично, тогда как вызов __() из кода разбиения на страницы терпит неудачу.   -  person Jose    schedule 18.05.2013
comment
Почему вы не упомянули версию cakephp, с которой работаете? Это важная часть информации для каждого вопроса, связанного с тортом.   -  person mark    schedule 18.05.2013
comment
Я использую торт 2.3.5.   -  person Jose    schedule 20.05.2013


Ответы (1)


Почему вы используете метод 1.x в 2.x? Где ты это прочитал? В документации указано, что вам больше не нужен true в качестве второго аргумента для возврата строки:

'format' => __('Some Text', true)

должно быть

'format' => __('Some Text')

PS: Давно так - с 2.0 (а вы пользуетесь 2.3).

person mark    schedule 20.05.2013
comment
Запеченный код — это то, что помещает истинный аргумент в вызов функции. Похоже на проблему с тортом. Мне нужно вернуться и исправить запеченный код. - person Jose; 20.05.2013
comment
Ваши собственные шаблоны выпечки? Я почти уверен, что текущие основные шаблоны тортов в порядке. В противном случае, пожалуйста, покажите мне код в шаблоне, где он вставляет эти истинные значения. - person mark; 20.05.2013
comment
‹?php eco \$this-›Paginator-›counter(array( 'format' =› __('Страница %page% из %pages%, показывая %current% записей из %count% всего, начиная с записи %start %, заканчивающийся на %end%', правда) )); - person Jose; 21.05.2013
comment
Это из /cake/console/templates/default/views/index.ctp - person Jose; 21.05.2013
comment
Я проверил версию cakephp, которую использует Bake, и обнаружил, что это 1.3.7. Основываясь на том, что я прочитал здесь: stackoverflow.com/questions/11967312/ Мне нужно использовать другую версию испечь. - person Jose; 21.05.2013
comment
Да, конечно. Всегда вызывайте сердцевину торта/оболочку выпечки соответствующим образом из каталога вашего приложения (например, ./Console/cake bake ...или ../lib/Cake/Console/cake bake ...). Тогда этого не может быть. - person mark; 21.05.2013