Laravel路由访问类别和显示方法

时间:2018-06-02 09:54:29

标签: laravel

显示我使用以下路线的博客列表

// Blog List
Route::name('blog')->get('blog', 'Front\BlogController@index');

Ex:http://www.mypropstore.com/blog/

要显示博客类别,

Route::name('category')->get('blog/{category}', 'Front\PostController@category');

Ex:http://www.mypropstore.com/blog/buy-sell

要显示博客详情,评论和标签详情,我们使用“帖子”中间件

// Posts and comments
Route::prefix('posts')->namespace('Front')->group(function () {
    Route::name('posts.display')->get('{slug}', 'PostController@show');
    Route::name('posts.tag')->get('tag/{tag}', 'PostController@tag');
    Route::name('posts.search')->get('', 'PostController@search');
    Route::name('posts.comments.store')->post('{post}/comments', 'CommentController@store');
    Route::name('posts.comments.comments.store')->post('{post}/comments/{comment}/comments', 'CommentController@store');
    Route::name('posts.comments')->get('{post}/comments/{page}', 'CommentController@comments');
});

Ex:http://www.mypropstore.com/posts/apartment-vs-villa-which-is-the-right-choice-for-you

现在我想将博客详细信息页面更改为

http://www.mypropstore.com/blog/apartment-vs-villa-which-is-the-right-choice-for-you- {{blogid}}

Ex:http://www.mypropstore.com/blog/apartment-vs-villa-which-is-the-right-choice-for-you-54

如果我更改上述格式,则会冲突类别页面。任何机构都知道如何设置博客详细信息页面的路由(中间件“帖子”)

2 个答案:

答案 0 :(得分:1)

假设blogid部分位于建议路线的末尾......

http://www.mypropstore.com/blog/apartment-vs-villa-which-is-the-right-choice-for-you-{{blogid}}

...是数字,您可以这样做:

对于帖子详情页面的路线定义,请使用以下内容:

Route::name('posts.display')
    ->get('blog/{slug}-{id}', 'PostController@show')
    ->where('id', '[0-9]+');

这样做可确保此路线仅与模式blog/{slug}-{id}之后的路径匹配,但会限制路线id部分必须为数字,即组成只有一个或多个数字。

您需要确保此路线之前category路线相匹配,否则category路线将优先。

你的控制器应该有这样的show方法:

class PostController extends Controller
{
    public function show($slug, $id)
    {
        // $id will contain the number at the end of the route
        // $slug will contain the slug before the number (without the hyphen)

        // You should be able to do this to get your post.
        $post = Post::findOrFail($id);
        dd($post);
    }
}

答案 1 :(得分:0)

由于您的类别不是数字,您可以解决冲突,指定ID始终是这样的数字:

Route::get('/blog/{id}', 'BlogController@show')->where('id', '[0-9]+');