Невозможно отменить псевдонимы Phalcon

#php #phalcon #phalcon-routing

#php #phalcon #phalcon-маршрутизация

Вопрос:

Я использую пример приложения INVO отсюда:

 https://github.com/phalcon/invo
  

Я скопировал все файлы и установил базу данных и базовый URL.

Это работает, я могу войти в систему и т.д.

тем не менее, я хотел узнать, как использовать перенаправления, например

Я хотел бы использовать contact-us вместо contact без изменения имени контроллера.

Итак, я создал файл routes.php внутри папки app / config и поместите это внутрь:

 <?php
$router = new PhalconMvcRouter(false);

$router->add('/contact-us', array(
    'controller' => "contact",
    'action' => "index"
))->setName('contact');

$router->handle();
return $router;
  

и я создал это в своем файле начальной загрузки index.php в общедоступном корневом каталоге

 $di = new PhalconDIFactoryDefault();

$di->set('router', function(){
    require __DIR__.'/../app/config/routes.php';
    return $router;
});
  

Однако это не работает, и когда я пытаюсь получить доступ, http://localhost/test/contact-us это работает, но http://localhost/test/contact-us перестало работать, и я перенаправлен на домашнюю страницу.

Если я (прокомментирую маршрут) сделаю это:

 /*$router->add('/contact-us', array(
    'controller' => "contact",
    'action' => "index"
))->setName('contact');*/

$router->handle();
return $router;
  

Ни http://localhost/test/contact-us , ни http://localhost/test/contact-us не работает;(.

Если я раскомментирую его обратно. contact-us работает, но contact нет.

Я предполагаю, что это b / c of ->setName('contact') и оно хранится в памяти или в каком-то файле.

как вернуть его в исходное состояние и «отменить» его?

Ответ №1:

Вы можете создать два маршрута, и каждый из них будет работать:

 $router->add('/contact', array(
    'controller' => "contact",
    'action'     => "index"
));

$router->add('/contact-us', array(
    'controller' => "contact",
    'action'     => "index"
));
  

Или использовать группы маршрутов.

Итак, если у вас есть ContactController и вы не хотите получать к нему доступ с помощью url /contact, вам следует добавить маршрутизатор в контейнер DI. После этого страницы будут доступны только через маршрутизатор, а формат запроса по умолчанию / controller / action работать не будет.