CakePHP前缀路由

3

问题概述: 我理解了'admin'=>true/false的用法,也理解了在我的情况下'user'=>true/false的用法,并且可以创建适合每种情况的链接,但是我想知道如何将其实现到路由文件中。 例如,在路由文件中已经有以下内容:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

然而,我希望任何以前缀开头的链接都能进行相同的重定向,并删除前缀。 我尝试过:

Router::connect('*/pages/*', array('controller' => 'pages', 'action' => 'display', 'user'=>false));
Router::connect('/user/pages/*', array('controller' => 'pages', 'action' => 'display', 'user'=>false));

但这并不起作用。 需要帮忙吗? 谢谢。
----------(以下是原问题)--------
简单的一个问题.. 我不确定如何防止前缀, 例如,如果我在domain.com/admin/order或domain.com/user/order中,它们是orders控制器中的admin_和user_操作,并且导航菜单包含链接到页面显示(controller pages action display,**),当它们被点击时,它们会自动添加当前前缀。 如何在路由器文件中设置以重定向通配符前缀(即/pages/)?
编辑- 我的意思是我想重定向到没有前缀的URL....因为当用户处于前缀URL中并单击一个仅包含controller => action =>的链接时,它会自动将链接前缀化为当前前缀,无论是管理员还是用户,在这种情况下,我只需要一个没有前缀的链接。(即,我希望cake只在链接明确指定使用前缀时才使用前缀,而不是在每个简单的html helper控制器、action链接上继续使用它们。)
2个回答

1
如果您正在使用 $html 助手来创建链接,则可以使用以下代码:
$html->link('users', array('prefix' => $this->params['prefix'],'controller' => 'users','action' => 'index'))

我的意思是我想重定向到一个没有前缀的URL...因为当用户在前缀URL中并单击一个仅包含控制器=>操作=>的链接时,它会自动将链接前缀化为当前前缀,无论是管理员还是用户,在这种情况下,我只需要一个没有前缀的链接。(即,如果Cake只在涉及到要使用前缀时才使用前缀,而不是在每个简单的HTML助手控制器、操作链接上继续使用它们,那就更好了。 - Nick Martin
1
你尝试过使用 $html->link('users', array('prefix' => '','controller' => 'users','action' => 'index')) 来避免自动添加前缀吗? - RSK
2
他走在正确的轨道上 $html->link('users', array('controller'=>'users','action'=>'index','admin'=>false); - David Yell
1
好的,所以我原本认为'admin'=>false只适用于管理员前缀,但它也可以用于其他前缀,例如我的情况是'user'=>false(以及admin false)。 - Nick Martin
@DavidYell,感谢您的更正。如果您将其发布为答案,那就太好了。 - RSK

0

我不是cakePHP的用户,所以这有点冒险,但在Zend框架中,在视图中,您可以使用$this->baseUrl('controller/action');,这将为您提供所需的URL。

例如,如果我在www.example.com/admin/moderate/,并且我在视图中编写了一个链接:

<a href="users/search">搜索用户</a>

该链接将是:

www.example.com/admin/moderate/users/search

如果我使用:

<a href="<?= $this->baseUrl('users/search'); ?>">搜索用户</a>

现在的输出将是:

www.example.com/users/search

经过快速的谷歌搜索,我认为cakePHP的替代方法是Router::url(array('controller'=>'users','action'=>'search'), true);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接