Очистка всех префиксов - PullRequest
1 голос
/ 04 ноября 2011

У меня есть несколько префиксов в игре в существующем приложении CakePHP. У меня также есть немного первичной навигации в макете, которая указывает на общие методы. Я знаю, что могу явно установить для каждого префикса значение false, чтобы избежать связи с префиксом, но есть ли путь быстрого доступа, который просто говорит Cake не использовать префиксы независимо от того, какой контекст может существовать в настоящее время?

Например, я на странице, где риэлтор может зарегистрироваться (/realtor/users/register). У меня есть похожий префикс для инспекторов и подрядчиков, потому что процесс регистрации немного отличается. Поскольку я не аутентифицирован, в первичной навигации есть ссылка Login , но действие входа в систему является общим для всех типов пользователей и должно быть доступно без префикса.

<?php echo $this->Html->link( 'Login', array( 'controller' => 'users', 'action' => 'login', 'realtor' => false, 'inspector' => false, 'contractor' => false ) ) ?>

Я бы хотел, чтобы в ссылке можно было просто отключить все префиксы, а не отключать каждый возможный префикс независимо. Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 25 февраля 2013

Я знаю, что прошло 2 года с тех пор, как был дан ответ на вышеуказанный вопрос, хотя я думаю, что нашел еще менее навязчивый способ выполнить то, что вы хотите.
Задайте имя префикса динамически, взяв текущее значение префикса из $this->paramsи установите его на false, вот так

$this->Html->link('hello', array($this->params['prefix']=>false, 'controller'=>'posts','action'=>'index'));

Значение $this->params['prefix'] будет тем и уместным в тот момент, чтобы установить на false.

ура

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

Если потеря возможностей маршрутизации не является для вас проблемой, вы можете передать строку вместо массива методу link ():

<?php 
echo $this->Html->link('Login', '/users/login');
?>

EDIT

Чтобы сохранить механизм маршрутизации, вот маленький помощник, который бы справился:

class MyHtmlHelper extends HtmlHelper
{
    public function link($title, $url = null, $options = array(), $confirmMessage = false)
    {
        $prefixes = Router::prefixes();

        foreach($prefixes as $prefix)
        {
            $url[$prefix] = false;
        }

        return parent::link($title, $url, $options, $confirmMessage);
    }
}

Конечно, вы можете изменить имя метода, если хотите сохранить стандартный метод link (). Я протестировал это с Cake2, но это должно работать с Cake1.3

...