2012-02-08 4 views
0

У меня есть приложение, которое использует несколько префиксов и, хотя и не часто, также необычно добавлять префикс по мере продвижения. Что делает это болезненным, так это то, что метод Router::url() по умолчанию предполагает, что любой построенный url должен наследовать префикс текущей страницы, если префикс явно не указан.Есть ли способ предотвратить «префиксное наследование»?

Это, кажется, очень преднамеренное действие, поэтому я предполагаю, что большинство людей считают его более полезным, чем нет, но я считаю его более удобочитаемым/поддерживаемым, просто создавая свои URL-адреса с префиксами, где URL-адрес нужен один и оставьте его, когда он этого не сделает. Давным-давно я создал AppHelper::url(), чтобы переопределить Helper::url(), который ничего не принимает и только строит URL-адрес с префиксом, когда он явно запрашивается, и это огромная помощь для ссылок, генерируемых в представлениях.

Существует, однако, еще один сценарий, который я бы хотел отменить и не нашел «чистого» способа его решения. Рассмотрим не прошедшего проверку пользователя, который добавил ссылку на ресурс администратора (например, /admin/thing_that_needs_to_be_administered/some_action). S/he нажимает эту закладку, но не регистрируется, поэтому s/he перенаправляется. Вместо того, чтобы перенаправляться на /users/login, он/она отправляется в /admin/users/login, которого не существует. Упс.

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

Я думаю, что это становится проще в Cake 2, но мы работаем на Cake 1.3.

Любые мысли были бы высоко оценены.

+0

Это компонент Auth, который выполняет перенаправление? Возможно, вам понадобится создать обработчик в своем предшественнике вашего контроллера приложения, если нужно, при необходимости, обработать перенаправление. –

+0

В этом примере да, но так же легко можно было бы перенаправить пользовательскую переадресацию, если страница с другим префиксом вызывается без какого-либо необходимого значения. –

ответ

0

Я бы предложил попробовать этот маршрут, если вы еще не:

EDIT: К сожалению, loginAction

<?php 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'admin' => false); 
?> 

Это будет явно указать URL для входа.

+0

Да, и это то, что я сделал в краткосрочной перспективе, но я должен явно указать каждый префикс на false, а затем поддерживать этот маршрут каждый раз, когда добавляется префикс. То, что мне нужно, - это способ продолжения обслуживания. –

+0

К сожалению, я не знаю никаких других способов, не модифицирующих ядро. –

+0

Меня тоже. В идеале я хотел бы расширить класс «Router» и переопределить его метод «url», но он все статичен и называется так или иначе, так что это не вариант. :-) Благодаря. –

Смежные вопросы