如何更改 laravel 中的 URL

How can I change the URL in laravel

我有一个博客列表。当我点击博客时,我想将 URL 作为博客名称,例如:www.domain.com/blog/my-blog-name.

在我的博客列表中,我有 link 作为 blog/blogid(2/3/4) ex : www.domain.com/blog/1

当有人访问 www.domain.com/blog/1 时,URL 应该是 www.domain.com/blog/my-blog-name { 博客名称将根据博客 ID 更改 }

我对此做了很多研究,但没有运气。如果有人能帮助我摆脱困境那就太好了。

我正在使用 laravel 5.4。我也是 laravel 的新手。

尝试下一个!

在您的 routes 文件中:

Route::get('blog/{slug}', 'BlogController@show'); // make sure not conflict with resource routes define

然后是你的 BlogController:

public function show($slug)
{
    $id = explode($slug, '-')[0]; //get id of post

    // your logic
}

希望对您有所帮助!

您可以简单地从数据库中获取您的头衔,并将其用作 slug,如下所示:

$slug = str_replace(' ','-',$yourtitle);

您需要在数据库中创建一个 slug 字段,您将 find 使用 slug 而不是 id

post ]

定义路线:

Route::get('post/{slug}', 'PostsControler@findBySlug');

示例http://example.com/post/my-awesome-blog-post

并在您的控制器中

//PostsController.php

public function findBySlug($slug)
{
    $post = Post::where('slug', $slug)->firstOrFail();

    // return view
}

我建议您使用 Eloquent-Sluggabletitle 字段自动创建 slug

$post = new Post([
    'title' => 'My Awesome Blog Post',
]);
$post->save();
// $post->slug is "my-awesome-blog-post"

您可以在模型中使用 Laravel 个修改器 setSlugAttribute:

public function setSlugAttribute($title){
  $this->attributes['slug'] =  str_replace(' ','-',$title);   
}

并将此示例代码写入您的 web.php :

Route::get('/blog/{slug}',  'BlogController@show');

您可以在您的方法中使用 slug。

public function findBySlug($slug){

$post = Post::whereSlug($slug)->firstOrFail();


}

您可以为您的博客创建一个独特的 slug 或名称,但是由于名称可能重复并且对于用户来说很难手动创建一个独特的 slug,所以我建议您这样做

Route::get('/blog/{id}/{name}',  'BlogController@show');

这在 url 中会很好看,例如在 Whosebug 中!

你可以重写函数getRouteKeyName

public function getRouteKeyName()
{
    return 'slug';
}