2011-11-04 65 views
1

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

例如,我是一个网页,一个房地产经纪人可以注册(/realtor/users/register)上。我对检查员和承包商有类似的前缀,因为注册过程稍有不同。由于我没有经过认证,有在主导航一个登录链接,但登录操作是由用户的所有类型的共享,并应无任何前缀进行访问。

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

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

+0

可能有一个辅助方法。你使用Configure :: write('Routing.prefixes')来定义它们吗? – mark

+0

是的,前缀是使用routing.prefixes定义的。 –

回答

1

如果丢失的路由功能是不是对你的问题,你可以传递一个字符串,而不是一个阵列来的链接()方法:

<?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

+0

是的,我真的不想失去路由。 –

+0

OK,我编辑我的回答与可能会满足您的需求 – nIcO

+0

我somethink类似的例子帮手。你的解决方案看起来更短,更容易,我不得不承认。提示:称之为defaultLink() - 那就是我所谓的我的 – mark

4

工作,我知道它过2次年以来上述问题得到回答,但我想我发现了一个更小侵入性的方式来完成你想要的东西。
$this->params取当前前缀值,并将其设置为false,像这样

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

$this->params['prefix']值将是一个和有关在那一刻设置为false动态设置前缀名。

欢呼声