我正在开发一个Cakephp 2.x ..我想从网址中删除动作或控制器名称...例如我面临的问题是那样的
我的消息控制器上有一个功能名称索引,其中显示所有手机号码
网址是
www.myweb.com/Messages
现在在我的控制器中有第二个功能,其名称为消息,我在其中收到针对手机号码的消息
所以现在我的网址在点击数字后变为
www.myweb.com/Messages/messages/823214
现在我想删除动作名称消息,因为它看起来已经成熟... 想要这样的网址
www.myweb.com/Messages/823214
答案 0 :(得分:1)
使用Route元素连接路径时,您可能希望将路由元素替换为传递参数。通过使用Router::connect()的第三个参数,您可以定义哪些路径元素也可以作为传递参数使用:
// SomeController.php
public function messages($phoneNumber = null) {
// some code here...
}
// routes.php
Router::connect(
'/messages/:id', // E.g. /messages/number
array('controller' => 'messages', 'action' => 'messages'),
array(
// order matters since this will simply map ":id"
'id' => '[0-9]+'
)
);
你也可以参考上面给出的链接,希望它对你有用。
请告诉我是否可以为您提供更多帮助。
答案 1 :(得分:0)
您可以使用Cake-PHP的路由功能。查看this page。
答案 2 :(得分:0)
问题中的示例与REST routing类似,内置功能可映射:
GET /recipes/123 RecipesController::view(123)
要启用休息路由,只需使用Router::mapResources('controllername');
如果您只想为问题中的一个案例写一条路线 有必要使用星际路线:
Router::connect('/messages/*',
array(
'controller' => 'messages',
'action' => 'messages'
)
);
用法:
echo Router::url(array(
'controller' => 'messages',
'action' => 'messages',
823214
));
// /messages/823214
这有缺点,因为使用这种路线无法验证/messages/
之后的内容。为避免这种情况,需要使用路由参数。
Router::connect('/messages/:id',
array(
'controller' => 'messages',
'action' => 'messages'
),
array(
'id' => '\d+',
)
);
用法:
echo Router::url(array(
'controller' => 'messages',
'action' => 'messages',
'id' => 823214 // <- different usage
));
// /messages/823214
答案 3 :(得分:0)
在config / routes.php中
$routes->connect('/NAME-YOU-WANT/:id',
['controller' => 'CONTROLLER-NAME','action'=>'ACTIOn-NAME'])->setPass(['id'])->setPatterns(['id' => '[0-9]+']
);