我在现有的CakePHP应用程序中有几个前缀。我在布局中也有一些指向共享方法的主导航。我知道我可以明确地将每个前缀设置为false以避免与前缀链接,但是有一条快捷路径只是告诉Cake不使用任何前缀,无论当前哪个上下文存在?
例如,我在一个房地产经纪人可以注册的页面上{/realtor/users/register
)。我对检查员和承包商有类似的前缀,因为注册过程略有不同。由于我未经过身份验证,因此主导航中有登录链接,但登录操作由所有用户类型共享,无需任何前缀即可访问。
<?php echo $this->Html->link( 'Login', array( 'controller' => 'users', 'action' => 'login', 'realtor' => false, 'inspector' => false, 'contractor' => false ) ) ?>
我希望能够在链接中关闭所有前缀,而不是独立关闭每个可能的前缀。可能的?
答案 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