Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 08.01.2013 18:07:39

Не ест URL-кодированные символы

Мой роутинг простой, это была одна из двух причин по выбору Laravel вместо Symfony -

Route::controller(Controller::detect());

Такой роутинг не понимает строки
/pages/by_tag/%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BB%D0%BE%D0%BC%D0%BA%D0%B0

Зато понимает
/pages/by_tag/blahblah

Порыскав в исходниках, подозреваю, что в вышеупомянутом случае они подставляют шаблон control/action/(:any?)/(:any?) и т.д., который резолвится в

(?:/([a-zA-Z0-9\.\-_%=]+)

Но он почему-то выкидывает меня на роутинг 404 (который :all) — что делать?

Изменено ZoRDoK (08.01.2013 18:08:01)

Не в сети

#2 08.01.2013 18:13:12

Re: Не ест URL-кодированные символы

С первого взгляда ничего в глаза не бросается. Попробуй в router.php в метод match() подставить PHPvar_dump($pattern); и т.п. и посмотреть, что с чем сравнивается и почему не совпадает.

Не в сети

#3 08.01.2013 18:23:46

Re: Не ест URL-кодированные символы

Решил проблему пока так, но мне не нравится этот вариант, это не DRY

Route::get('/pages/by_tag/(:all)', 'pages@by_tag');

Не в сети

#4 08.01.2013 18:26:23

Re: Не ест URL-кодированные символы

Proger_XP пишет:

}%С первого взгляда ничего в глаза не бросается. Попробуй в %%router.php%% в метод %%match()%% подставить %%(php)var_dump($pattern);%% и т.п. и посмотреть, что с чем сравнивается и почему не совпадает.

Я xdebug-ом только что туда глянул, в общём, там URL становится /pages/by_tag/русскийтекст вместо %D0%FE и прочих процентов. Возможно, я что-то неправильно делаю при генерации ссылки. Смотрю в исходную страницу, где нажимаю ссылку, там значится то, что я написал в первом постинге (в href параметр с %-нтами), при нажатии Google Chrome генерит запрос с русскоязычным текстом, который под приведённую регулярку уже не подходит. Что-то тут не так.

UPD
Смотрю заголовки, Хром отправляет всё верно. Значит и  генерю всё верно, и проблема где-то в Laravel

Вот заголовок запроса

Request URL:http://***.local/pages/by_tag/%D0%B2%D0%B0%D1%80%D0%B5%D0%BD%D1%8C%D0%B5

Изменено ZoRDoK (08.01.2013 18:34:53)

Не в сети

#5 08.01.2013 18:40:11

Re: Не ест URL-кодированные символы

Вот ведь лол. Поискал по англоязычному форуму, это ошибка в HTTPFoundation от Smarty
http://forums.laravel.io/viewtopic.php?pid=21332#p21332

Однако, они эту ошибку уже исправили, а Laravel содержит устаревшую реализацию. Печально.

Не в сети

#6 08.01.2013 18:59:42

Re: Не ест URL-кодированные символы

Проблему решил таким образом (вдруг кому понадобится):

Скачал как zip вот отсюда последнюю версию HTTPFoundation Symfony
https://github.com/symfony/HttpFoundation

Распаковал в [project]/laravel/vendors/Components/HTTPFoundation-master
Переименовал старый в **-old а новый в имя без -master
Скопировал два файла из старого: LaravelRequest.php и LaravelResponse.php

Вуаля, url-кодированные запросы работают "из коробки" без костылей.

Не в сети

#7 08.01.2013 20:35:20

Re: Не ест URL-кодированные символы

У меня было подозрение, что URL-кодированные символы где-то внутри раскрываются, но не знал, что это баг Symfony. Рад, что разобрался.

Не в сети

#8 13.01.2013 21:18:42

Re: Не ест URL-кодированные символы

Вот теперь еще кроме родных багов и баги от симфони в наследство достаются. Надо написать разрабам — пусть обновят в ближайшем релизе HTTPFoundation. А может критическая масса багрепортов накопится, и откажутся от HTTPFoundation ;)

Не в сети

#9 14.01.2013 13:28:00

Re: Не ест URL-кодированные символы

  1. А может критическая масса багрепортов накопится, и откажутся от HTTPFoundation ;)

Судя по тому, в каком направлении всё движется, таких «Foundation» будет становится только больше и Laravel превратится в просто связующий код. Не могу сказать, хорошо это или плохо, но это однозначно не то, почему я начал его использовать в первую очередь. Искать ошибки в тонне разношёрстного кода — то ещё удовольствие.

Не в сети

#10 14.01.2013 17:14:51

Re: Не ест URL-кодированные символы

Ну я Ko3 еще использую. Мне нравится.
Еще смотрю в строну Lithium. Там есть на что посмотреть ☺

Не в сети

#11 12.02.2013 18:43:21

Re: Не ест URL-кодированные символы

У меня вот проблема с короткимы сслыками, может кто в курсе. Пишу поисковик на парсерах, всё работало и вот такая ситуация. Не читаются коды символа %(%25), он плюёт 400ю ошибку, так же space(%20) в начале строки но тут по страшнее, плюётся 403й страничкой. Мне бы процент исправить. Но в каком направлении копать вообще ума не приложу. А так же. Слешь читается а его код %2F выкидывает ошибку 404. Так же как и бэкслэшь.

Изменено Alex_PS (12.02.2013 18:47:32)

Не в сети

#12 12.02.2013 21:20:57

Re: Не ест URL-кодированные символы

Alex_PS, ты говоришь про escape-последовательности в адресе маршрута или где? Какое-то сумбурное описание проблемы, я мало что понял.

Не в сети

#13 13.02.2013 18:41:23

Re: Не ест URL-кодированные символы

Пишу я скажем

И всё работает.
А вот если написать

либо %20,%5с то он тут же выдаст 400 ошибку, либо 403.
Проверял все символы, не работает именно процент.

Не в сети

#14 13.02.2013 20:47:37

Re: Не ест URL-кодированные символы

Так сложно сказать. Выше уже писали о баге в Symfony, если не используешь последнюю версию (laravel\vendor\Symfony\Component\HttpFoundation) — попробуй замени, возможно ошибка уйдёт.

Если нет, возьми в руки отладчик и пройди от начала работы laravel/laravel.php. Удобно использовать XDebug или php_dbg.

Не в сети

#15 14.02.2013 05:45:27

Re: Не ест URL-кодированные символы

Symfony я и сам поставил перед тем как постить на форум - не помогло. Спасибо, будем дебаггер юзать.

Не в сети

Подвал раздела