Kohana 3 маршрута и строки запросов - PullRequest
0 голосов
/ 26 февраля 2011

Похоже, что существует общее мнение, что механизм маршрутизации Kohana 3 будет игнорировать параметры строки запроса (см., Например, этот поток ). Тем не менее, это не то поведение, которое я вижу в моем приложении.

Маршрут определен так:

Route::set('an_action', 'admin/an_action(/<id>)')
->defaults(array(
    'directory'     => 'admin',
    'controller'    => 'welcome',
    'action'        => 'an_action',
));

Самому действию требуется параметр "url" из строки запроса, и если не указано ничего, возникает ошибка, указывающая, что маршрутизация прошла успешно и попытка выполнить действие:

http://myapp.localhost/admin/an_action/3

ERROR: ErrorException [ 8 ]: Undefined index:  url ~ APPPATH/classes/controller/admin/welcome.php [ 37 ]

но если я добавлю параметр запроса url, маршрутизация завершится неудачно:

http://myapp.localhost/admin/an_action/3?url=myapp.localhost/admin

Kohana_Request_Exception [ 0 ]: Unable to find a route to match the URI: admin/an_action/3?url=myapp.localhost/admin

Чтобы сделать это еще более неприятным, такая же настройка маршрутизации прекрасно работает в другом приложении, которое я разрабатываю на том же локальном хосте. Идеи? Мой маршрут не настроен правильно? Может ли это быть проблемой с установкой Kohana? Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 26 февраля 2011

Эй!Что за каталог по умолчанию?Вы можете удалить это.

Route::set('an_action', 'admin/an_action(/<id>)')
->defaults(array(
   'controller'    => 'Admin_welcome',
   'action' => 'index'

);

Итак, в этом случае у вас будет следующее:

action: localhost / admin / an_action / 3, чтобы открыть контроллер URL: Controller_admin_welcome сдействие по умолчанию - action_index.

Поэтому, если вы хотите, чтобы имя вашего действия было в вашем URL, вам нужно использовать зарезервированное имя Kohana для этого - я не уверен насчет имени - завтра я обновлюмой пост об этом.

Я полагаю, что вы правильно настроили свой mod_rewrite и файл index.php.

И это контроллер по умолчанию:

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'Main',
        'action'     => 'index',
    ));
...