Laravel 以模型为参数的控制器方法
Laravel controller method with model as parameter
我使用 php artisan make:model Transaction -a
创建了一个模型,因此它也为该模型生成了迁移、工厂和资源控制器。一切都按预期工作,但我在控制器代码中意识到了这一点:
/**
* Display the specified resource.
*
* @param \App\Transaction $transaction
* @return \Illuminate\Http\Response
*/
public function show(Transaction $transaction)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Transaction $transaction
* @return \Illuminate\Http\Response
*/
public function edit(Transaction $transaction)
{
//
}
看起来它期待 show()
和 edit()
方法中的模型实例,这似乎是 return 视图的助手,但我如何将它集成到网络路由中?
英语不是我的母语。
运行 php artisan route:list
在控制台上。您将获得应用程序的所有路线。这是 Route::resource('admin/blog-category', 'BlogCategoryController');
routes.By 路由列表的列表,您将了解 URI 和操作。
| | POST | api/admin/blog-category | blog-category.store | App\Http\Controllers\BlogCategoryController@store | api |
| | GET|HEAD | api/admin/blog-category | blog-category.index | App\Http\Controllers\BlogCategoryController@index | api |
| | GET|HEAD | api/admin/blog-category/create | blog-category.create | App\Http\Controllers\BlogCategoryController@create | api |
| | GET|HEAD | api/admin/blog-category/{blog_category} | blog-category.show | App\Http\Controllers\BlogCategoryController@show | api |
| | PUT|PATCH | api/admin/blog-category/{blog_category} | blog-category.update | App\Http\Controllers\BlogCategoryController@update | api |
| | DELETE | api/admin/blog-category/{blog_category} | blog-category.destroy | App\Http\Controllers\BlogCategoryController@destroy | api |
| | GET|HEAD | api/admin/blog-category/{blog_category}/edit | blog-category.edit | App\Http\Controllers\BlogCategoryController@edit | api |
检查 BlogCategoryController@show
Uri 你会得到 api/admin/blog-category/{blog_category}
。那就是你必须传递一个 parameter.As 参数你必须传递博客类别 ID。
例如:如果 url 是 api/admin/blog-category/10
public function show(Blog $BlogCategory)
{
$blogCategory = $BlogCategory;
}
在 $blogCategory
中,您将获得 id 为 10 的博客类别的结果。
我提到的 404 错误可能是使用 utf-8 的路由上的错误。当我更改为 trasacoes(从 'transações')时,它起作用了。我会提出问题。
如果您的路线是 administração/transações/{transaçõe}
并且您的模型是 Transaction 那么 laravel 不知道如何处理它!
所以要让它工作,有两种方法:
你必须根据这个 link:
明确地绑定它
将 Route::model('transaçõe', App\Transaction::class);
添加到 RouteServiceProvider 的 boot()
方法,如下所示:
public function boot()
{
parent::boot();
Route::model('transaçõe', App\Transaction::class);
}
或您将路线更改为administração/transações/{transaction}
。
我使用 php artisan make:model Transaction -a
创建了一个模型,因此它也为该模型生成了迁移、工厂和资源控制器。一切都按预期工作,但我在控制器代码中意识到了这一点:
/**
* Display the specified resource.
*
* @param \App\Transaction $transaction
* @return \Illuminate\Http\Response
*/
public function show(Transaction $transaction)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Transaction $transaction
* @return \Illuminate\Http\Response
*/
public function edit(Transaction $transaction)
{
//
}
看起来它期待 show()
和 edit()
方法中的模型实例,这似乎是 return 视图的助手,但我如何将它集成到网络路由中?
英语不是我的母语。
运行 php artisan route:list
在控制台上。您将获得应用程序的所有路线。这是 Route::resource('admin/blog-category', 'BlogCategoryController');
routes.By 路由列表的列表,您将了解 URI 和操作。
| | POST | api/admin/blog-category | blog-category.store | App\Http\Controllers\BlogCategoryController@store | api |
| | GET|HEAD | api/admin/blog-category | blog-category.index | App\Http\Controllers\BlogCategoryController@index | api |
| | GET|HEAD | api/admin/blog-category/create | blog-category.create | App\Http\Controllers\BlogCategoryController@create | api |
| | GET|HEAD | api/admin/blog-category/{blog_category} | blog-category.show | App\Http\Controllers\BlogCategoryController@show | api |
| | PUT|PATCH | api/admin/blog-category/{blog_category} | blog-category.update | App\Http\Controllers\BlogCategoryController@update | api |
| | DELETE | api/admin/blog-category/{blog_category} | blog-category.destroy | App\Http\Controllers\BlogCategoryController@destroy | api |
| | GET|HEAD | api/admin/blog-category/{blog_category}/edit | blog-category.edit | App\Http\Controllers\BlogCategoryController@edit | api |
检查 BlogCategoryController@show
Uri 你会得到 api/admin/blog-category/{blog_category}
。那就是你必须传递一个 parameter.As 参数你必须传递博客类别 ID。
例如:如果 url 是 api/admin/blog-category/10
public function show(Blog $BlogCategory)
{
$blogCategory = $BlogCategory;
}
在 $blogCategory
中,您将获得 id 为 10 的博客类别的结果。
我提到的 404 错误可能是使用 utf-8 的路由上的错误。当我更改为 trasacoes(从 'transações')时,它起作用了。我会提出问题。
如果您的路线是 administração/transações/{transaçõe}
并且您的模型是 Transaction 那么 laravel 不知道如何处理它!
所以要让它工作,有两种方法:
你必须根据这个 link:
明确地绑定它将
Route::model('transaçõe', App\Transaction::class);
添加到 RouteServiceProvider 的boot()
方法,如下所示:public function boot() { parent::boot(); Route::model('transaçõe', App\Transaction::class); }
或您将路线更改为
administração/transações/{transaction}
。