CakePHP - Пользовательский контроллер маршрута - PullRequest
2 голосов
/ 26 сентября 2011

Есть ли у меня возможность создавать динамические настраиваемые маршруты? Цель состоит в том, чтобы позволить пользователям указывать любой URL, который они хотят направить на любые контроллеры / представления / структуры.

Если пользователь хочет создать что-то, как показано ниже:

/a_quick_brown_fox => foxes/view/42
/jumps_over        => actions/view/42
/lazy_dog          => dogs/view/42

и многие другие в будущем без необходимости редактировать маршруты. Я не уверен в возможном решении.

Я хочу разрешить пользователю вводить что-то вроде ниже

Custom URL  => [        ]
Controller  => [        ]
ID for View => [        ]

Я буду хранить его в таблице, чтобы можно было проверять уникальные URL, а что нет. Чтобы обеспечить масштабируемость для новых контроллеров, у меня все в порядке с префиксом к слагам, таким как /l/<slug>

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

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

Я не уверен, можете ли вы определить это непосредственно в системе маршрутизации, как вы предлагаете, однако вы можете сделать что-то вроде этого.

Сначала определите все контроллеры / действия ваших приложений в явном виде, чтобы ваши пользователи победилине перезаписывайте их.

Затем определите маршрут перехвата всех маршрутов, который будет направлен на выбранный вами контроллер

//default routes
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
//other    

//custom route
Router::connect('/*', array('controller' => 'routes', 'action' => 'custom'));

Ваш route_controller / custom_action будет получать любые параметры, содержащиеся в URL, просто выполнитеотыщите свою БД оттуда и перенаправьте на правильный маршрут, определенный в вашей базе данных.

function custom() {
    //get values via $this->params
}
0 голосов
/ 27 сентября 2011

Самый простой способ сделать это - заставить контроллер маршрутов сохранять новые маршруты и кэшировать сохраненные маршруты. Каждый раз, когда добавляется новый маршрут, очищайте кеш и сохраняйте его снова.

Затем создайте собственный класс Route, который будет извлекать записи кэша и обрабатывать их в маршрутах.

0 голосов
/ 26 сентября 2011

Вы можете создать собственный класс маршрута, но я не думаю, что у вас есть доступ к данным POST в нем (вы можете получить доступ к данным GET и Cache, если этого достаточно).Вероятно, самый простой способ - это перенаправление в контроллере.

...