Настройка маршрутизации CakePHP 2.0 для домена / параметра (без имени контроллера) - PullRequest
1 голос
/ 01 ноября 2011

Я хотел бы иметь возможность маршрутизировать что-то вроде следующего в CakePHP 2.0:

domain.com/london
domain.com/milton keynes

для конкретного контроллера и действия.

Приложение имеет несколько контроллеров, поэтому оно должно использовать этот маршрут, только если предоставленный параметр не соответствует имени контроллера. Я достиг этого с помощью CakePHP 1.3.12, добавив следующий код в конец config/routes.php

Router::connect(
  '/:location',
  array('controller' => 'articles', 'action' => 'testing'),
  array('pass' => array('location'), 'location' => '[a-z ]+')
);

Использование этого кода с CakePHP 2.0 работает, только если я закомментирую строку require из config/routes.php, но затем я теряю маршруты по умолчанию, так что URL, указывающий на любой другой контроллер, будет пойман этим.

Как мне добиться желаемой маршрутизации?

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Насколько я знаю, это не должно работать и в Cake 1.3, просто потому, что ваше регулярное выражение [a-z ]+ также соответствует случаю для простого маршрута / controller_name;Маршрутизатор не имеет возможности различить два и, таким образом, всегда будет маршрутизировать к тому, с которым он встречается первым.

Однако для этого можно создать собственный класс маршрута.Марк Стори (один из разработчиков Cake) написал отличный пост об этом довольно давно, он предназначен для Cake 1.3, но вы можете легко применить этот принцип к 2.0 (я знаю, потому что я использую его в своем приложении 2.0).Вы можете найти пост здесь .

0 голосов
/ 15 декабря 2015

Это может не отвечать на конкретный вопрос, заданный выше, но это актуально, эта страница появляется в результатах поиска, и моя цель - спасти любого, кто найдет его (включая меня в будущем, я думаю), от того, что мне не придется исследовать то, что я только что исследовал

Мне нужно было добавить маршрутизацию с параметром для другого домена. Например, example.com должен вести себя как обычно, в то время как example.org/some_page должен направлять напрямую к определенному контроллеру и действию. Поэтому я добавил следующее к своему Config/routes.php:

if ( CakeRequest::host()=='example.org' ) {
    Router::connect('/:my_variable', 
        array(
            'controller'=>'my_controller', 
            'action'=>'my_action'
        ),
        array(
            'my_variable'=>'[a-zA-Z-0-9 ]+', 
            'pass'=>array('my_variable')
        )
    );
}
...