我想从URL CakePHP中删除操作名称

drkbr07n  于 2022-11-12  发布在  PHP
关注(0)|答案(4)|浏览(208)

我正在一个Cakephp 2.x上工作...我想从url中删除操作或控制器名称...例如,我面临的问题是这样的
我的消息控制器上有一个功能名称索引,其中显示了所有的移动的号码
URL被

www.myweb.com/Messages

现在在我的控制器中有第二个函数,它的名字是messages,在其中我获得针对移动的号码的消息
所以现在我的网址变成点击后的数字是

www.myweb.com/Messages/messages/823214

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

www.myweb.com/Messages/823214
q35jwt9p

q35jwt9p1#

当使用Route元素连接路由时,您可能希望将参数传递给routed元素。通过使用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]+'
    )
);

你也可以参考我给上面的链接,希望它能为你工作。
如果我还能帮你的话就告诉我。

6bc51xsx

6bc51xsx2#

REST路由

问题中的示例看起来类似于REST routing,这是一个内置功能,它将Map:

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
oxalkeyp

oxalkeyp3#

在config/routes.php文件中

$routes->connect('/NAME-YOU-WANT/:id',
        ['controller' => 'CONTROLLER-NAME','action'=>'ACTIOn-NAME'])->setPass(['id'])->setPatterns(['id' => '[0-9]+']
    );
ykejflvf

ykejflvf4#

你可以使用Cake-PHP的路由特性。

相关问题