2011-10-31 2 views
1

Я хотел бы иметь возможность маршрутизировать-то вроде следующего в CakePHP 2.0:Настройка 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-адрес, указывающий на любой другой контроллер, был пойман этим.

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

ответ

1

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

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

+0

Спасибо - да пользовательский класс маршрута, который смотрит на поставляемом URL, запрашивает базу данных, чтобы увидеть, если она существует там, если он делает - отсылает к контроллер – Richard

0

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

Мне нужно было добавить маршрутизацию с параметром для другого домена. Например, 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') 
     ) 
    ); 
}