想要从url CakePHP中删除动作名称

时间:2013-07-06 19:22:21

标签: cakephp url-rewriting cakephp-2.0 cakephp-2.1

我正在开发一个Cakephp 2.x ..我想从网址中删除动作或控制器名称...例如我面临的问题是那样的

我的消息控制器上有一个功能名称索引,其中显示所有手机号码

网址是

  www.myweb.com/Messages

现在在我的控制器中有第二个功能,其名称为消息,我在其中收到针对手机号码的消息

所以现在我的网址在点击数字后变为

    www.myweb.com/Messages/messages/823214

现在我想删除动作名称消息,因为它看起来已经成熟... 想要这样的网址

       www.myweb.com/Messages/823214

4 个答案:

答案 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路由

问题中的示例与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]+']
    );