2014-11-02 3 views
0

Мое приложение phalcon отлично работает со стандартным соглашением по трафику MVC. Однако, я хочу, чтобы справиться с некоторыми переменными через URL, то у меня есть маршрут:Phalcon route не работает

$router = new \Phalcon\Mvc\Router(); 
$router->add("/timesheet/some/{year:[0-9]+}/{month:[0-9]{2}}/{day:[0-9]{2}}", "Timesheet::some"); 
$router->add("/timesheet/getreport/{type:[a-z]}/{year:[0-9]+}/{month:[0-9]{2}}/{day:[0-9]{2}}", "Timesheet::getreport"); 
$router->addPost("/user/auth", "User::auth"); 

return $router; 
  1. Первый маршрут (табель/немного) работало нормально, я могу получить доступ к «году», «месяц» переменная, использующая $year = $this->dispatcher->getParam("year");, однако второй маршрут (расписание/получение) не работает. В этом случае $year = $this->dispatcher->getParam("year"); возвращает null.

  2. Если я изменил

    $ маршрутизатор = новый \ Phalcon \ Mvc \ Router (ложь);

    $ router-> добавить ("/: контроллер /: действие", массив ( "контроллер" => 1, "действие" => 2, ));

    $ router-> add ("/ timesheet/some/{year: [0-9] +}/{month: [0-9] {2}}/{day: [0-9] {2 }} "," Timesheet :: some "); $ router-> addPost ("/ timesheet/getreport/{type: [az]}/{year: [0-9] +}/{month: [0-9] {2}}/{day: [0 -9] {2}} "," Timesheet :: getreport "); $ router-> addPost ("/ user/auth", "User :: auth");
    return $ router;

каждый запрос будет направлен на индекс/индекс. Мой URL-адрес проекта - localhost/fpas, и я уже пытаюсь использовать route/fpas/timesheet/some и/timesheet/some, но он всегда перенаправляется на индекс/индекс. Что с этим не так? (security/auth закомментирован, поэтому это не результат аутентификации).

  1. Из моего понимания, маршрут по умолчанию, $ router = new \ Phalcon \ Mvc \ Router(); только разрешить вам следовать соглашению MVC, а $ router = new \ Phalcon \ Mvc \ Router (false); но вам нужно указать все маршруты для каждого контроллера/действия. Могу ли я сохранить соглашение для большей части действия, а для некоторых действий - конкретные переписывающие маршруты. Как я могу это сделать?

спасибо.

ответ

2

Это работает для меня:

$router = new Phalcon\Mvc\Router(); 
$router->add("/", array(
    'controller' => 'index', 
    'action' => 'setLanguage', 
)); 

$router->add("/{language:[a-z]{2}}", array(
    'controller' => 'index', 
    'action' => 'index', 
    'language' => 1 
)); 

маршрутизации этого каждый получает по умолчанию только с языком в начале

$router->add("/{language:[a-z]{2}}/:controller/:action", array(
    'controller' => 2, 
    'action' => 3, 
    'language' => 1 
)); 

с действием по умолчанию «индекс», когда он не в URL

$router->add("/{language:[a-z]{2}}/:controller", array(
    'controller' => 2, 
    'action' => 'index', 
    'language' => 1 
)); 

некоторые другие маршруты

$router->add("/{language:[a-z]{2}}/:controller/:action/:params", array(
    'controller' => 2, 
    'action' => 3, 
    'language' => 1, 
    'params' => 4 
)); 

$router->add("/{language:[a-z]{2}}/question/add/{type}", array(
    'language' => 1, 
    'controller' => 'question', 
    'action' => 'add', 
)); 
Смежные вопросы