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); 添加到 RouteServiceProviderboot() 方法,如下所示:

    public function boot()
    {
        parent::boot();
    
        Route::model('transaçõe', App\Transaction::class);
    }
    
  • 您将路线更改为administração/transações/{transaction}