gpt4 book ai didi

php - 使用正则表达式的 CakePHP 路由

转载 作者:搜寻专家 更新时间:2023-10-31 20:48:58 24 4
gpt4 key购买 nike

我有一个 Controller 设置来接受两个变量:/clients/view/var1/var2

我想将其显示为 /var1/var2

所以我试过了

Router::connect('/*', array('admin'=>false, 'controller' => 'clients', 'action' => 'view'));

但这会停止所有其他 Controller 作为/*路由一切

站点上的所有其他页面都在 admin 前缀内,所以基本上我需要一个路由,如果当前前缀是 admin 则忽略它!我试过了(正则表达式来自 Regular expression to match a line that doesn't contain a word? ):

Router::connect('/:one', array('admin'=>false, 'controller' => 'clients', 'action' => 'view'), array(
'one' => '^((?!admin).*)$'
));

但我认为正则表达式不正确,因为如果我导航到 /test,它会要求测试 Controller ,而不是客户端

我唯一的其他路线是:

Router::connect('/admin', array('admin'=>true, 'controller' => 'clients', 'action' => 'index'));
Router::connect('/', array('admin'=>false, 'controller' => 'users', 'action' => 'login'));

我做错了什么?谢谢。

最佳答案

我第一次误解了你的问题。我测试了你的代码,也没有得到预期的结果。原因可能是正则表达式解析器不支持负先行断言。但我仍然认为您可以通过重新排序路线来解决这个问题:

CakeBook describes which routes are automatically generated if you use prefix routing .在您的情况下,必须在“/*”-route 之前手动分配这些路由以捕获所有管理操作。这是对我有用的代码:

// the previously defined routes
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/admin', array('controller' => 'clients', 'action' => 'index', 'admin' => true));

// prefix routing default routes with admin prefix
Router::connect("/admin/:controller", array('action' => 'index', 'prefix' => 'admin', 'admin' => true));
Router::connect("/admin/:controller/:action/*", array('prefix' => 'admin', 'admin' => true));

// the 'handle all the rest' route, without regex
Router::connect(
'/*',
array('admin'=>false, 'controller' => 'clients', 'action' => 'view'),
array()
);

现在我得到所有带有 admin 前缀的管理 Controller 操作,并且/test1/test2 被重定向到客户端 Controller 。

关于php - 使用正则表达式的 CakePHP 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10213814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com