Как передать дополнительные параметры в URL-адрес KohanaPHP (версия 3.1+), например …
http://example.com/blog/edit/4000/3200
… где «блог» – это blog.php в папке контроллеров, «edit» – это метод контроллера, 4000 – параметр 1, который я могу использовать для тех, кто хочет отредактировать запись, а 3200 – это параметр 2, который я могу использовать для идентификатора записи?
Я получаю блог и редактирую детали. Проблема заключается в 4000 и 3200. Когда я запускаю этот URL-адрес, я получаю сообщение об ошибке: «404 – Не удалось найти блог соответствия маршруту / изменить / 4000/3200»
Я вынужден сделать что-то необычное с файлом .htaccess или передать параметры в качестве параметров запроса после вопросительного знака?
Это объясняет, что делать:
http://kohanaframework.org/3.1/guide/kohana/routing
Но по существу, мне нужно отредактировать файл application \ bootstrap.php и изменить это:
Route::set('default', '(<controller>(/<action>(/<id>)))') ->defaults(array( 'controller' => 'welcome', 'action' => 'index' ));
поRoute::set('default', '(<controller>(/<action>(/<id>)))') ->defaults(array( 'controller' => 'welcome', 'action' => 'index' ));
к этому:
Route::set('default', '(<controller>(/<action>(/<param1>)(/<param2>)))') ->defaults(array( 'controller' => 'welcome', 'action' => 'index' ));
поRoute::set('default', '(<controller>(/<action>(/<param1>)(/<param2>)))') ->defaults(array( 'controller' => 'welcome', 'action' => 'index' ));
И теперь в моем файле контроллера blog.php теперь я могу передать 2 параметра в метод класса «action_edit» следующим образом:
public function action_edit() { $sParam1 = $this->request->param('param1'); $sParam2 = $this->request->param('param2'); $this->response->body('param1=' . $sParam1 . ' param2=' . $sParam2); }
Вам нужен такой маршрут в вашем bootstrap.php:
Route::set('blog_edit', 'blog/edit/<param1>(/<param2>)') array( 'param1' => '[[:digit:]]{1,}', 'param2' => '[[:digit:]]{1,}', )) ->defaults(array( 'controller' => 'blog', 'action' => 'edit', ));
поRoute::set('blog_edit', 'blog/edit/<param1>(/<param2>)') array( 'param1' => '[[:digit:]]{1,}', 'param2' => '[[:digit:]]{1,}', )) ->defaults(array( 'controller' => 'blog', 'action' => 'edit', ));
Примечание: « ()
» делает param2
необязательным.
В контроллере вы можете получить доступ к параметрам в качестве аргументов метода или через объект Request:
class Controller_Blog { public function action_edit($param1, $param2) { // or $param1 = $this->request->param('param1'); $param2 = $this->request->param('param2'); // [...] } }
Я не тестировал этот код, но он должен быть очень близок к тому, что вам нужно.
Ссылка на « Учебное пособие по Kohana PHP 3.0 (KO3), часть 6 »