CakePHP - 管理路由为/ admin /,但不是所有的其余(设置默认管理员false的方式?)
我阅读教程,并发现要使用“管理员”前缀,您可以取消注释:CakePHP - 管理路由为/ admin /,但不是所有的其余(设置默认管理员false的方式?)
Configure::write('Routing.prefixes', array('admin'));
config/core.php文件。
我做到了,我的管理路由工作得很好 -/admin/users/add在我的users_controller中添加了admin_add()函数。
问题是 - 它也改变了我的正常链接 - 即。我的“注销”按钮现在尝试转到/ admin/users/logout而不是/ users/logout。我意识到我可以添加'admin'=> false,但我宁愿不必为我的网站中的每个链接都这样做。
有没有办法让它只与'admin'=> true或/ admin/...一起转到管理员,而不是所有其他链接?
扩大用户阿爸科比的编辑,看看如何烹调手册创建一个帮助:http://book.cakephp.org/view/1097/Creating-Helpers
如果有禁用手动路由上所有的链接是一个烦恼(这将是我的! ),您可以创建一个新的帮助程序MyCustomUrlHelper
(名称不必那么长),并让它使用核心UrlHelper为您生成URL。
class MyCustomUrlHelper extends AppHelper {
public $helpers = array('Html');
function url($controller, $action, $params ,$routing = false, $plugin = false) {
//Example only, the params you send could be anything
$opts = array(
'controller' => $controller,
'action' => $action
//....
);
}
//another option
function url($params) {
//Example only, the params you send could be anything
$opts = array(
'controller' => $params['controller'],
'action' => $params['action']
//....
)
}
//just fill up $opts array with the parameters that core URL helper
//expects. This allows you to specify your own app specific defaults
return $this->Html->url($opts); //finally just use the normal url helper
}
基本上,你可以使它作为冗长或简洁,只要你想。它只是一个实际的URL助手的包装类,它将从内部完成工作。这使您可以为您的特定应用程序提供默认值。这也可以让你在一个地方做出改变,并让整个应用程序的路由更新。
编辑
你也可以检查通过$是否选择采用阵列是一个字符串。这样你就可以拥有两全其美的了。
确保如果您使用您处理它在的HtmlHelper前缀的路由::链接调用像这样
<?php
...
echo $html->link(array(
'controller' => 'users',
'action' => 'logout',
'plugin' => false,
'admin' => false,
));
...
?>
**编辑** 你可以在你的AppHelper视察延长URL功能传递数组并将Routing.prefixes键设置为false,如果它们尚未在url调用中设置。
然后,您需要每次在管理链接中指定前缀。
请在回答之前阅读完整的问题。 “我意识到我可以添加'admin'=> false,但我宁愿不必为我的网站中的每个链接都这样做。” (谢谢你的回答,但它不回答我的问题) – Dave 2011-04-05 16:40:05
你的编辑听起来像我可能想要做的 - 你能带我走向正确的方向吗?如果我能使它起作用,并且编辑你的原始答案,我可能会将它标记为“已回答”! – Dave 2011-04-07 14:16:44
我已经为这个问题添加了50个信誉奖励 - 如果你能够更好地解释我将如何扩展url函数(也许有w /一个例子?),我很乐意将它标记为答案,并给你代表去瓦特/它。 – Dave 2011-04-08 06:16:11
HtmlHelper接受两种给定URL的方式:它可以是一个Cake相对URL或一组URL参数。
如果您使用URL参数,默认情况下如果您未指定'admin'=> false参数,则HtmlHelper会自动以“admin”为前缀添加动作前缀。
恕我直言,摆脱此参数最简单的方法是使用Cake相对URL作为字符串。
<?php
//instead of using
//echo $this->Html->link(__('logout', true), array('controller' => 'users', 'action' => 'logout'));
//use
echo $this->Html->link(__('logout', true), '/users/logout');
亲切的问候,
尼科
相对URL是否阻止我稍后改变路由? – Dave 2011-04-05 20:21:03
我不确定明白你的意思。 '/ users/logout'将始终指向控制器'用户'的操作'logout()'(而不是admin_logout()或whatever_prefix_logout())。 (当然,如果你没有在routes.php中为这个URL配置一个特定的路由) – nIcO 2011-04-05 20:41:36
顺便说一句,当我开始使用Cake时,我曾经写过带有参数数组的链接,但我很快意识到它是恕我直言使用字符串参数更稳定(更少冗长) – nIcO 2011-04-05 20:47:25
这一周,我遇到了这个问题,这似乎代码来修复它。让我知道,如果它不适合你,我可以尝试找出我做了什么来让它工作。
$this->Auth->autoRedirect = false;
$this->Auth->loginAction = array(Configure::read('Routing.admin') => false, 'controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array(Configure::read('Routing.admin') => false, 'controller' => 'users', 'action' => 'logout');
$this->Auth->loginRedirect = array(Configure::read('Routing.admin') => false, 'controller' => 'users', 'action' => 'welcome');
这真令人沮丧,所以我很乐意帮忙。
,我迟到了,但我有一个很好的答案:
您可以通过创建一个AppHelper类覆盖缺省行为。除非它被指定当你调用链接()或URL(),管理员将被设置为false
<?php
class AppHelper extends Helper{
function url($url = null, $full = false) {
if(is_array($url) && !isset($url['admin'])){
$url['admin'] = false;
}
return parent::url($url, $full);
}
}
?>
:创建应用程序/ app_helper.php并粘贴以下。
我喜欢这个答案,但问题是1.3 - 你可以在CakePHP 1.3中做到这一点吗? – Dave 2012-03-27 02:52:16
这是因为Cake在生成视图时使用了相关的url。这有助于在不同的插件/自定义路线中使用,但当您需要静态路线时则是PITA。你需要扩展帮助程序或使用静态字符串(这意味着你必须改变它们) – JohnP 2011-04-08 06:30:34
@JohnP你会推荐哪些?扩展帮助程序或使用静态字符串?我之前在*中提出过这个问题,并且同意使用这个数组更好,所以这就是我所做的 - 但现在听起来像静态可能会更好/更容易?像往常一样,这取决于是否需要 – Dave 2011-04-08 06:43:03
。数组的优点是,因为你发送命名参数,蛋糕会根据路由确切地知道如何制作你的url。如果你使用静态字符串,这取决于你。如果你知道项目的范围,静态字符串是可以的。更容易的是将url帮助器扩展/包装到你自己的帮助器中。这将涵盖所有的基地 - 1)短弦2)易于使用3)可扩展。 – JohnP 2011-04-08 06:46:37