我有一个博客列表。当我点击博客时,我想将URL设为博客名称,如:www.domain.com/blog/my-blog-name
。
在我的博客列表中,我的链接为blog / blogid(2/3/4) ex:www.domain.com/blog/1
当有人访问www.domain.com/blog/1
时,网址应为www.domain.com/blog/my-blog-name
{博客名称将根据博客ID更改}
我对此做了很多研究,但没有运气。如果有人帮我解决这个问题会很棒。
我正在使用laravel 5.4。我也是laravel的新手。
答案 0 :(得分:3)
您可以为您的博客创建一个独特的slug或名称,但由于名称可能是重复的,并且对于用户来说很难手动创建一个独特的slug,那么我建议您这样做
Route::get('/blog/{id}/{name}', 'BlogController@show');
这在url中看起来不错,例如在stackoverflow中!
答案 1 :(得分:2)
您需要在数据库中创建slug
字段,并find
使用slug
代替id
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
}
并在您的控制器中
slug
我建议您使用Eloquent-Sluggable从title
字段中自动创建$post = new Post([
'title' => 'My Awesome Blog Post',
]);
$post->save();
// $post->slug is "my-awesome-blog-post"
值
ComboBox {
anchors.fill: parent
model: rangeList
currentIndex: 1
}
答案 2 :(得分:0)
尝试以下一个!
在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
}
希望这能帮到你!
答案 3 :(得分:0)
你可以简单地从数据库中取出你的头衔并将其用作下面的slu ::
$slug = str_replace(' ','-',$yourtitle);
答案 4 :(得分:0)
您可以在模型中使用Laravel mutators 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();
}
答案 5 :(得分:0)
您可以覆盖功能getRouteKeyName
-0