0

我正在开发 Cakephp 2.x .. 我想从 url 中删除动作或控制器名称...例如我面临的问题就是这样

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

网址是

  www.myweb.com/Messages

现在在我的控制器中有第二个函数,其名称是消息,我在其中获取针对手机号码的消息

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

    www.myweb.com/Messages/messages/823214

现在我想删除动作名称消息,因为它看起来很奇怪......想要一个这样的网址

       www.myweb.com/Messages/823214
4

4 回答 4

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]+'
    )
);

你也可以参考我上面给出的链接,希望它对你有用。

让我知道我是否可以为您提供更多帮助。

于 2013-07-07T05:47:46.053 回答
0

您可以使用 Cake-PHP 的路由功能。看看这个页面

于 2013-07-07T05:45:55.347 回答
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
于 2013-07-08T08:51:17.343 回答
0

在 config/routes.php

$routes->connect('/NAME-YOU-WANT/:id',
        ['controller' => 'CONTROLLER-NAME','action'=>'ACTIOn-NAME'])->setPass(['id'])->setPatterns(['id' => '[0-9]+']
    );
于 2019-01-18T11:29:01.853 回答