【问题标题】:Links not relative in cakephpcakephp中不相关的链接
【发布时间】:2011-02-16 21:20:56
【问题描述】:

在我的布局中,我有一个作为元素包含的菜单,它包含一个类似这样的链接。

<? $html->link('New Part Number','/part_numbers/add'); ?>

我遇到的问题是蛋糕没有正确重定向,最终将我发送到“http://localhost/part_numbers/add”而不是“http://localhost/my_client_folder/client_app/part_numbers/add”(我正在本地构建它)。我的 CakePHP 应用程序存储在我的 webroot 文件夹下的几个目录中,但我认为无论应用程序位于何处,CakePHP 都会自动检测如何构建链接,对吧?

那么我需要配置应用程序根文件夹,或者创建路由什么的吗?

【问题讨论】:

    标签: php cakephp hyperlink html-helper relative-path


    【解决方案1】:

    你也可以使用:

    Router::url(array(controller => '', action => '', true))
    

    【讨论】:

      【解决方案2】:

      谢谢大家的解决方案,我之前的解决方案确实有错误:

      你必须从“$this”构建它,这样它才能知道你来自哪里,否则它无法弄清楚如何构建相对链接。

      Html->link("新零件号", array('controller' => 'part_numbers', 'action' => 'add')); ?>

      链接不起作用的真正原因(如下所述)是因为未指定数组。这应该可以修复链接:

      <?= $html->link("New Part Number", array('controller' => 'part_numbers', 'action' => 'add')); ?>
      

      【讨论】:

      • 很高兴听到您有解决方案,但我认为这是因为您使用了数组方法 (array('controller' =&gt; ..., 'action' =&gt; ...))
      • $html-&gt;$this-&gt;Html-&gt; 确实没有区别,至少与路由无关。
      【解决方案3】:

      一般来说,作为纪律问题,我建议始终始终在视图和控制器操作中使用反向路由。根据我的经验,一旦您开始尝试使用任何高级路由功能,“智能 URL”(例如 /part_numbers/add)就会很快崩溃。

      这也违反了一次编写代码,多次阅读的原则——识别由/part_numbers/add这样的简单路由调用的控制器操作可能很简单,但在具有大量自定义路由的大型应用程序中,它就变得很多了如果您始终使用反向路由数组,则更容易弄清楚您的链接将调用什么操作。

      【讨论】:

        【解决方案4】:

        如果您使用示例中的 URL 而不是 array('controller', 'action'),则您的解决方案没有什么不同。

        解决方案是将&lt;base href="&lt;?php echo 'http://'.$_SERVER['SERVER_NAME'].Router::url('/'); ?&gt;" /&gt; 放入您的标题中。

        这将使所有链接(也包括 src 标签)相对于您的 webroot。它不会影响 JS/CSS URL-s!

        【讨论】:

        • 当他在 CakePHP 中工作时,该框架被设计为使用助手。添加基本​​标签并不能真正解决他的问题,并且意味着回避框架,在我看来这是不整洁和hacky。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 2015-06-04
        • 2012-01-25
        • 1970-01-01
        相关资源
        最近更新 更多