Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cakephp url修改:删除操作并添加段塞拐点_Url_Cakephp_Controller_Routes_Action - Fatal编程技术网

cakephp url修改:删除操作并添加段塞拐点

cakephp url修改:删除操作并添加段塞拐点,url,cakephp,controller,routes,action,Url,Cakephp,Controller,Routes,Action,我试图删除cakephp url中的操作并添加一个slug拐点,更清楚地说,这是我预期的输出: 来自:example.com/posts/view/81/这是一篇测试文章 到此:example.com/posts/this-is-a-test-post 这是我当前的代码: 这给了我这个输出:example.com/posts/view/这是一个测试帖子 控制器: public function view($title = null) { if (!$title) {

我试图删除cakephp url中的操作并添加一个slug拐点,更清楚地说,这是我预期的输出:
来自:example.com/posts/view/81/这是一篇测试文章
到此:example.com/posts/this-is-a-test-post

这是我当前的代码:
这给了我这个输出:example.com/posts/view/这是一个测试帖子

控制器:

public function view($title = null) {
        if (!$title) {
            throw new NotFoundException(__('Invalid post'));
        }
        $post = $this->Post->findByTitle($title);
        if (!$post) {
            throw new NotFoundException(__('Invalid post'));
        }
        $this->set('post', $post);
    }
view.ctp:

$this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['title']));
我也试过这个,这个链接是我的参考:
输出:example.com/posts/view/21/This-is-a-test-post

控制器:

function view($id) {
        $this->Post->id = $id;
        $this->set('post', $this->Post->read());
    }
view.ctp

$this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['id'], Inflector::slug($post['Post']['title'],'-')));
下面是我尝试过但失败的其他链接,我也尝试过修改routes.php,但无法生成正确的代码




非常感谢您的帮助/建议。

请使用Id和命名参数

关于routes.php 将新路线定义为-

Router::connect('/posts/:id-:title',
    array('controller' => 'posts',
        'action' => 'view')
);
此新定义的路由将匹配并解析包含id和标题命名参数的所有url

重要提示::不要在routes.php结束后定义新路由。尝试在文件的中间定义

在望
使用Id和命名参数

关于routes.php 将新路线定义为-

Router::connect('/posts/:id-:title',
    array('controller' => 'posts',
        'action' => 'view')
);
此新定义的路由将匹配并解析包含id和标题命名参数的所有url

重要提示::不要在routes.php结束后定义新路由。尝试在文件的中间定义

在望
好的,上面提供的解决方案将满足您的需求,但在阅读您的问题后,我脑海中仍然浮现出一件事。。。在你的控制器中,你试图使用标题阅读文章,我的意思是这会减慢你的系统速度,这在编程中是不推荐的,所以使用id并在你的db表中增加一列slug(SEO标题),它将用于创建你的文章url

For example: 
Post title: This is a test post 
Create seo title for this as: this-is-a-test-post-123
Stor seo title in DB as <this-is-a-test-post>

好的,上面提供的解决方案将满足您的需求,但在阅读您的问题后,我脑海中仍然浮现出一件事。。。在你的控制器中,你试图使用标题阅读文章,我的意思是这会减慢你的系统速度,这在编程中是不推荐的,所以使用id并在你的db表中增加一列slug(SEO标题),它将用于创建你的文章url

For example: 
Post title: This is a test post 
Create seo title for this as: this-is-a-test-post-123
Stor seo title in DB as <this-is-a-test-post>