Тоже сначала думала сделать в init(), но мне этот вариант не понравился тем, что теперь в любой наследуемой от этой форме обязательно нужно будет в init() вызывать родительский init. Поэтому решила, что удобнее в конструкторе все это сделать.
Пусть меня заминусуют и т.п. за то, что я тут упомяну голосование или карму.
Но я уже вообще не понимаю зачем люди голосуют. Вот зачем? Хоть бы отписывали что плохого в статье. А то — минус просто и все.
Неужели вредную информацию какую-то выложила?
Ну спасибо, скоро просто вообще не смогу ничего публиковать.
Не понимаю как какой-то метод решения задачи может быть deprecated, честно скажу… особенно с такой документацией как у Зенда. Ниче ж не поймешь и примеры им лень было писать :(
Насчет текстовок — как по мне то ненадежный абсолютно метод. А если разработчикам захочется переписать текст? Или у них на все 100% гарантия? :)
А где можно найти, что именно этот метод решения данной проблемы правильный?
з.ы.: против Вашего совета ничего не имею :) Спасибо. Просто интересно как правильнее будет сделать и хочу разобраться.
Да, я это уже слышала.
Но у меня такое чувство, что либо я не там смотрю, либо это говорят люди, которые уже и так разбираются в ЗФ.
Вот явный пример:
API Zend_Form_Element
bool $_ignore = false (line 110)
Ignore flag (used when retrieving values at form level)
access: protected
Как понимать «Ignore flag (used when retrieving values at form level)»?? Как используется? Зачем используется?
Побегала я по АПИ туда-сюда и, честно скажу, толку никакого — что есть там описание АПИ, что его нет.
С документацией та же картина. Какой-то пример есть, какого-то нет. Я уже молчу о верстке их сайта — таблицы перекрываются менюшуой — прочитать ничего не возможно.
В общем не знаю… может я где-то не там смотрю, но без 100 грамм там не разобраться…
Может я не умею читать… не знаю… но буквально полдня мне хватило, чтобы разобраться в Doctrine, чтоб она меня заинтересовала, чтоб все было понятно и все работало. Значит какую-то документацию я всетаки читать умею.
Еще вот пример. Может просто чего-то не понимаю.
Zend_Loader::registerAutoload();
Пример оказывается уже нерабочий. Точнее — мне выбрасывается сообщение о том, что такой метод уже depricated с какой-то там версии. Так почему это в документации есть? И не сказано как сделать по-другому. Ну понятно — найти то найду, если надо будет. Но быстро не получилось.
Возможно сказывается что с зф я уже работаю около года и все нововведения понимаются на раз, так как четко соблюдаются конвенции кодирования. Начало насколько я помню было сложное и очень помогла распечатка книги Роба Аллена (копейки стоит, купи)
А сейчас такой документации мне хватает за глаза, если честно апидоку не смотрю соовсем (как то не срослось, люблю побегать по сорцам)
zendframework.com/manual/en/zend.loader.autoloader.html
Буду признателен за пример кода с использованием текстовок. Что-то в мане не нашел ничего внятного.
В разделе валидаторов примеры локализации даются с константами :/
Я все сообщения держу в отдельных файлах, для каждого из языков. Вся локализация в одном месте. Язык определяется по поддомену. Формы подхватывают локализацию сообщений, если поместить обьект класса Zend_Translate в реестр
Zend_Registry::set('Zend_Translate', $translate);
Зачем локализованные строки держать в конструкторах? А если завтра придется перевести ресурс еще на несколько языков?
Поняла.
В общем-то искала какой-то метод попроще, чтоб не нужно было разбираться в Zend_Translate особо. Потому что пока что сайт собирается быть только на одном языке. А это вообще мой первый проект на Зенде… И мне и так с головой проблем хватает.
Спасибо за подсказку. Сразу же переделаю так, чтоб было меньше проблем на будущее.
Еще тогда вопрос по организации… «Я все сообщения держу в отдельных файлах, для каждого из языков.» — что из себя представляют файлы? И откуда берете «все сообщения»?
Извиняюсь, если вопрос совсем ламерский. Просто мне что-то с Зендом сложновато по-началу, а сидеть тупить или изобретать велосипед в елементарном не хочется. Пользуюсь моментом, пока нашла знающего человека :)
При бутстраппинге определяется необходимый язык ($lang) и Zend_Translate инициализируется и помещается в реестр вот так
$translate = new Zend_Translate(«array», APPLICATION_PATH."/languages", $lang, array('scan' => Zend_Translate::LOCALE_FILENAME));
Zend_Registry::set('Zend_Translate', $translate); //здесь имя ключа реестра должно быть именно Zend_Translate
В директории APPLICATION_PATH/languages лежат файлы вида lang.php
en.php
ru.php
…
В самих файлах локализации просто возвращаю массив
return array(
'hello_world' => 'Привет мир'
);
П.С. локализацию использовал первый раз, поэтому на идеальное решение не претендую, просто поделился своим решением :)
Поняла.
В общем-то искала какой-то метод попроще, чтоб не нужно было разбираться в Zend_Translate особо. Потому что пока что сайт собирается быть только на одном языке. А это вообще мой первый проект на Зенде… И мне и так с головой проблем хватает.
Спасибо за подсказку. Сразу же переделаю так, чтоб было меньше проблем на будущее.
Еще тогда вопрос по организации… «Я все сообщения держу в отдельных файлах, для каждого из языков.» — что из себя представляют файлы? И откуда берете «все сообщения»?
Извиняюсь, если вопрос совсем ламерский. Просто мне что-то с Зендом сложновато по-началу, а сидеть тупить или изобретать велосипед в елементарном не хочется. Пользуюсь моментом, пока нашла знающего человека :)
Файлы могут быть самые разные, я использую xml (QT) как найболее удобный, немного извратившись можно переводить тексты через гуи тулз от одноименной компании, платные инструменты тоже существуют, но были отброшены.
Делайте как угодно, в старых версиях фреймворка у меня работало все через плагин контроллера, сейчас вероятно делал бы более правильно и бутстрапил.
Zend_Form, русификация сообщений об ошибках