Cakephp обратная маршрутизация: предотвратить откат

В cakephp (ветка 2.5), при попытке создать URL-адрес из массива, cakephp создаст его, если не найдет соответствующий в Config / rout.php.

Может быть, пример будет более полезным 🙂

Когда я делаю это:

echo Router::url(array(
'controller'       => 'some_non_existing_controller',
'action'           => 'some_non_existing_action',
'fake_named_param' => 'blahblah'
));

Я понимаю :

/some_non_existing_controller/some_non_existing_action/fake_named_param:blahblah

То, что я хотел бы получить, является исключением, говорящим мне «эй, этот маршрут не существует». Это помогло бы мне отладить мою работу и сразу же дать мне знать, когда я разрываю ссылки при изменении вещей в Config / rout.php.

При копании в коде ядра CakePHP я нашел ответственного за такое поведение. Он расположен именно здесь => http://api.cakephp.org/2.5/source-class-Router.html#921-921

Но так как я не хочу связываться с основным кодом, я хотел бы знать, есть ли у кого-нибудь идея, как это сделать правильно?

Спасибо !

1

Решение

Просто удалите эту строку из вашего routes.php,

require CAKE . 'Config' . DS . 'routes.php';

Теперь будут работать только явно связанные маршруты.

0

Другие решения

Как предложил Деймокс, я взглянул на пользовательский класс Route. Во-первых, я не думал, что это решит мою проблему, потому что в обычном классе Route для CakePHP определено, как анализировать URL-адрес в массиве маршрутизации или как преобразовать массив маршрутизации в URL-адрес, для данного маршрута. Тем не менее, моя проблема именно в том, как CakePHP обрабатывает обратную маршрутизацию, когда нет подходящего маршрута.

Таким образом, идея состояла в том, чтобы создать новый маршрут в конце Config / rout.php, целью которого является только перехват попыток обратной маршрутизации, которые не были разрешены ранее. Если этот маршрут запрашивается для обратной маршрутизации, это означает, что что-то не так с массивом маршрутизации, потому что ни один из других маршрутов не нашел URL для него.
Этот маршрут затем обрабатывается пользовательским классом маршрута, который будет регистрировать ошибку обратной маршрутизации.

В конце Config / rout.php:

App::uses('GarbageRoute', 'Routing/Route');
Router::connect('/', array(), array('routeClass' => 'GarbageRoute'));

В /Routing/Route/GarbageRoute.php:

<?php

class GarbageRoute extends CakeRoute {

public function match($url)
{
trigger_error(print_r($url, true) . 'does not match any url', E_USER_NOTICE);
return false;
}
}

Я все еще удивлен, что CakePHP не поддерживает его изначально, и что мне пришлось создавать собственные классы, чтобы получить такое поведение. Если у кого-то есть лучшее решение, не стесняйтесь поделиться!

0

По вопросам рекламы [email protected]