【问题标题】:Clearing all prefixes清除所有前缀
【发布时间】:2011-11-04 18:45:54
【问题描述】:

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

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

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

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

【问题讨论】:

  • 可以使用辅助方法。你使用 Configure::write('Routing.prefixes') 来定义它们吗?
  • 是的,前缀是使用routing.prefixes定义的。

标签: cakephp cakephp-1.3


【解决方案1】:

我知道上面的问题得到解答已经 2 年了,但我认为我找到了一种更不打扰的方式来完成你想要的。
通过从$this-&gt;params 获取当前前缀值并将其设置为false 来动态设置前缀名称,就像这样

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

$this-&gt;params['prefix'] 的值将是当时设置为false 的相关值。

干杯

【讨论】:

    【解决方案2】:

    如果失去路由功能对您来说不是问题,您可以将字符串而不是数组传递给 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

    【讨论】:

    • 是的,我真的不想丢失路由。
    • 好的,我用一个可能适合您需求的示例助手编辑了我的答案
    • 我也有类似的想法。我不得不承认,您的解决方案看起来更短更容易。提示:称之为 defaultLink() - 这就是我所说的
    • 不错。我认为可能有一个现有的 API,但您的助手看起来很紧凑。非常感谢。
    • 只是一个注释。我认为这将覆盖设置为 true 的现有 $url[$prefix]。这很容易解决。
    猜你喜欢
    • 2018-02-19
    • 2014-08-24
    • 2018-04-11
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多