在我的布局中,我有一个菜单,我已将其作为元素包含在内,并且它包含一个类似的链接..
<? $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会自动检测如何构建链接,无论应用程序位于何处,对吧?
那么我需要配置应用程序根文件夹,还是创建路由或什么?
谢谢!
答案 0 :(得分:1)
感谢大家的解决方案,我以前的解决方案确实是错误的:
你必须从“$ this”构建它,以便它知道你来自哪里,否则它无法弄清楚如何构建相对链接。
正如下面提到的那样,链接不起作用的真正原因是因为没有指定数组。这应该可以修复链接:
<?= $html->link("New Part Number", array('controller' => 'part_numbers', 'action' => 'add')); ?>
答案 1 :(得分:1)
如果您使用示例中的网址而不是array('controller', 'action')
,则您的解决方案也不例外。
解决方案是将<base href="<?php echo 'http://'.$_SERVER['SERVER_NAME'].Router::url('/'); ?>" />
放入标题中。
这将使所有链接(也是src标记)相对于您的webroot。它不会影响JS / CSS URL-s!
答案 2 :(得分:1)
一般情况下,我建议始终始终在视图和控制器操作中始终使用反向路由,这是一种纪律。根据我的经验,一旦您开始尝试使用任何高级路由功能,“智能网址”(例如/ part_numbers / add)会很快崩溃。
它也违反了编写代码一次的原则,多次读取它 - 识别由/part_numbers/add
之类的简单路径调用的控制器操作可能很简单,但在具有大量自定义路由的大型应用程序中,它如果您始终如一地使用反向路由数组,那么弄清楚链接将调用的操作会变得更加简单。
答案 3 :(得分:1)
您也可以使用:
Router::url(array(controller => '', action => '', true))