使用laravel路由在url中显示名称而不是id
我在laravel 4中定义了一条如下所示的路线:使用laravel路由在url中显示名称而不是id,laravel,routes,Laravel,Routes,我在laravel 4中定义了一条如下所示的路线: Route::get('/books/{id}', 'HomeController@showBook'); 例如,在显示/books/1的url中,现在我想问的是,是否有一种方法可以显示图书的名称,但也可以将id作为搜索引擎优化的参数保存在路由中 提前感谢您可以向url添加任意数量的参数,如下所示: Route::get('/books/{id}/{name}', 'HomeController@showBook'); Route::get
Route::get('/books/{id}', 'HomeController@showBook');
例如,在显示/books/1的url中,现在我想问的是,是否有一种方法可以显示图书的名称,但也可以将id作为搜索引擎优化的参数保存在路由中
提前感谢您可以向url添加任意数量的参数,如下所示:
Route::get('/books/{id}/{name}', 'HomeController@showBook');
Route::get('books/{name}', function($name){
$url = explode("-", $name);
$id = $url[0];
return "Book #$id";
});
现在,如果要创建此页面的url,可以执行以下操作:
URL::action('HomeController@showBook', ['id' => 1, 'name' => 'My awesome book']);
更新:
如果您确定永远不会有两本书具有相同的标题,您可以在url中使用该书的名称。您只需执行以下操作:
Route::get('/books/{name}', 'HomeControllers@showBook');
在
showBook
功能中,您需要使用名称而不是id
从数据库中获取图书。我强烈建议您同时使用id和书名,否则您可能会遇到麻烦,因为我认为书名不会总是唯一的。您也可以这样做:
Route::get('/books/{id}/{name}', 'HomeController@showBook');
Route::get('books/{name}', function($name){
$url = explode("-", $name);
$id = $url[0];
return "Book #$id";
});
所以,如果您传递一个url,比如:http://website.url/books/1-book-name
如果您使用的是laravel 8,这可能会很有帮助。
在控制器中添加此
public function show(Blog $blog)
{
return view('dashboard.Blog.show',compact('blog'));
}
Route::get('blog/{blog}', [\App\Http\Controllers\BlogController::class,'show'])->name('show');
在web.php中添加此
public function show(Blog $blog)
{
return view('dashboard.Blog.show',compact('blog'));
}
Route::get('blog/{blog}', [\App\Http\Controllers\BlogController::class,'show'])->name('show');
然后将其添加到您的模型中(我使用博客作为我的模型)
注意:请让您的列名唯一(良好做法)。
结果:http://127.0.0.1:8000/blog/HelloWorld ..…单个博客的url
所以不再有了
不客气。我想你误解了我想做的事。。在url栏中,我不希望url看起来像/books/1,而是/book/name of book。你的答案有用吗?我真的不喜欢这样做,我想坚持用id作为参数,从数据库中查找这本书。但是,如果你不想在地址栏中显示id,你就不能凭空找到id。你需要根据书的名字来查找它。我认为应该有一个解决方案,将id作为参数发送到操作,但在地址栏中显示它的名字。Laravel非常灵活,可以提供此功能。。只是需要幸运地发现,在http请求中不可能以任何其他方式添加id,您只有url提供给您的数据。所以拉威尔不能这么做。您可以尝试的唯一其他选项是通过post数据发送id,但是您需要为每个链接提供一个表单,或者使用查询字符串将它们添加到url,但这些都不利于SEO。