| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > [Catalys] Кодировка |
| Автор: DEER 8.10.2009, 12:59 | ||||||||
| Добрый день. Столкнулся с такой проблемой. Начну сначала. Изначально проект был на windows-1251 (и классы и шаблоны, и бд) все работало, но приходилось в каждом action контролеров явно указывать
то есть явно указывать, что content_type должен быть windows-1251. Это все работало, но именно это явное указание не понтравилось "заказчику". В связи с этим вопрос №1: Можно ли как то, где то указать, что content_type должен быть windows-1251? К конфиге каком нибудь? Все облазил - не нашел. Далее решил, что раз Catalyst работает с utf8, то пусть и проект будет на utf8 Изменил кодироку в БД у таблиц, изменил кодировку у классов проекта и шаблонов. В модели сделал такой конфиг
все. у меня все работает и отображается. Отослал проверить. Но у "заказчика" вылетает ошибка. Он ввел в поле русские символы и теперь
почитал на счет этой ошибки. Даже тут на форуме есть тема про это. Что получается? Я должен каждый парамерт из запросов и БД изменять
Не за что не поверю в сети нашел Catalyst::Plugin::Unicode, может он поможет? проблема в том, что у меня не воспроизводиться такая ошибка. |
| Автор: gcc 8.10.2009, 14:18 | ||||
я держу всегда везде в utf8
или
скорее всего begin Добавлено через 6 минут и 40 секунд а зачем вы его перевли на utf8? может быть стоит все таблицы перевести в utf8? |
| Автор: DEER 8.10.2009, 14:33 |
| да в том и прикол, что все таблицы тоже в utf8 и шаблоны в utf8 и классы в utf8 первый вопрос сам разобрал. переопределил метод process и View и там поставил нужный content_type. Странно, что пол года назад это не получилось сделать... |
| Автор: DaemonSuw 9.10.2009, 23:58 |
| В перле бы хорошо врубить магическую переменную $ENV{PERL_UNICODE} где нибудь "в начале" (не знаю где начало в каталисте - не работал) в блоке BEGIN {} но 100% уверенности нету( |
| Автор: sir_nuf_nuf 4.11.2009, 20:32 |
| Кстати знатоки каталиста, напишите плиз в каком порядке выполняются действия контроллеров. Помнится было какое - то действие, которое дергалось вперед всего в любом случае. Вот в нем то можно выставлять content-type |
| Автор: kapany3 5.11.2009, 09:51 | ||
Я каталист юзаю недавно, и на сколько мне известно, то нет такого действия. При создании нового проекта у вас в контроллере Root есть две подпрограммы: index и end. index можно переназвать или удалить вовсе, и ничего страшного не произойдёт. А вот end - действие, которое выполняется в обязательном порядке самым последним, его удалять нельзя. В доках сказано, что даже если вы ничего не собираетесь делать в этой подпрограмме, то она всё равно должна быть, хоть и пустая. Т.е. первого действия нет обязательного, последнее есть в которое можно и вставить content-type и оно отработает как раз перед передачей параметров шаблону. |
| Автор: sir_nuf_nuf 5.11.2009, 16:37 |
| Да это вообщем пофигу первое оно или последнее. Главное что бы оно выпонлнялось при любом запросе. Т.е. Root::end() - вызывается в любом случае ? - тогда нужно переопределять его. |
| Автор: DEER 5.11.2009, 17:28 | ||
а все описал в View
"заказчику" (www.reg.ru) подошел такой подход. То есть так можно делать получается |
| Автор: kapany3 5.11.2009, 22:14 | ||||||
у меня этот способ работает, я поправил
Судя по докам он отрабатывает при каждом запросе, когда все действия в контроллере выполнены (если этого метода нет в контроллере к которому произошёл запрос, то он ищется дальше, т.е. в родителе Root.pm). Кстати, как оказалось есть подобный метод, который отрабатывает в самом начале запроса, зовётся begin.
Это по-моему более логичный вариант чем указывать кодировку в sub end : ActionClass('RenderView'). Буду его использовать. Спасибо за идею! |