清除所有前缀

时间:2011-11-04 18:45:55

标签: cakephp cakephp-1.3

我在现有的CakePHP应用程序中有几个前缀。我在布局中也有一些指向共享方法的主导航。我知道我可以明确地将每个前缀设置为false以避免与前缀链接,但是有一条快捷路径只是告诉Cake不使用任何前缀,无论当前哪个上下文存在?

例如,我在一个房地产经纪人可以注册的页面上{/realtor/users/register)。我对检查员和承包商有类似的前缀,因为注册过程略有不同。由于我未经过身份验证,因此主导航中有登录链接,但登录操作由所有用户类型共享,无需任何前缀即可访问。

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

我希望能够在链接中关闭所有前缀,而不是独立关闭每个可能的前缀。可能的?

2 个答案:

答案 0 :(得分:4)

我知道自从上面的问题得到解答已经过去2年了,不过我觉得我找到了一种更难以实现你想要的东西。 通过从$this->params获取当前前缀值并将其设置为false来动态设置前缀名称,如此

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

$this->params['prefix']的值将是当前设置为false的相关值。

欢呼声

答案 1 :(得分:1)

如果丢失路由功能不是问题,可以将字符串而不是数组传递给link()方法:

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

修改

为了保持路由机制,这里有一个小助手可以解决这个问题:

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