以模型为参数的Laravel控制器方法

时间:2018-12-19 02:31:21

标签: laravel model controller url-routing laravel-5.7

我使用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()方法中使用模型实例,这似乎是返回视图的助手,但是如何将其集成到Web路由中呢?


英语不是我的母语。

3 个答案:

答案 0 :(得分:0)

在控制台上运行php artisan route:list。您将获得所有申请途径。这是Route::resource('admin/blog-category', 'BlogCategoryController');条路线的列表。通过路线列表,您可以了解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,您会得到api/admin/blog-category/{blog_category}。也就是说,您必须传递一个参数。作为参数,您必须传递博客类别ID。

例如:如果网址是api/admin/blog-category/10

public function show(Blog $BlogCategory)
    {
        $blogCategory = $BlogCategory;
    }

$blogCategory中,您将获得ID为10的博客类别的结果。

答案 1 :(得分:0)

我提到的404错误可能是utf-8路由上的错误。当我更改为trasacoes时(从“transaç'es”开始),它起作用了。我会提出问题。

答案 2 :(得分:0)

如果您的路线是administração/transações/{transaçõe},而您的模型是交易,那么laravel不知道该怎么做!

要使其正常运行,有两种方法:

  • 您必须根据此link对其进行显式绑定:

    Route::model('transaçõe', App\Transaction::class);添加到 RouteServiceProvider boot()方法中,如下所示:

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