如何将模型作为参数传递给控制器

时间:2019-09-18 10:04:45

标签: php laravel

我想将Product模型作为参数传递给ProductController,通常我是这样进行的:

php artisan make:model Model/Product -cr

然后laravel为我做魔术,但是现在我分别创建了模型和控制器。

我试图这样做:

    /**
     * Display the specified resource.
     *
     * @param  App\Model\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show(Request $request, Product $product)
    {
       return $product;
    }

php artisan route:list

| GET|HEAD  | products/{product}              | products.show              | App\Http\Controllers\ProductsController@show                        | api,jwt.auth |

路由器

Route::apiResource('/products', "ProductController");

请求

http://127.0.0.1/products/23?withsomequery=yes

没有错误:

-rw-r--r-- 1 www-data www-data        0 Sep 18 12:30 laravel-2019-09-18.log

以上所有代码均返回空数组,但我知道它应该返回某些内容。

我希望它返回类似:

{
 id: 23
 name: computer
 created_at: 2019-02-02
 updated_at: 2019-02-02
}

3 个答案:

答案 0 :(得分:1)

首先检查产品型号是否位于顶部,例如

use App\Product;

还要确保产品ID 23在您的数据库中可用。

检查您的日志文件,看看它是否产生任何错误。

还有一件事,我注意到您创建了一个apiResource,如果它的api路由将/ api /添加到了端点。

通过php artisan route:list检查所有端点

答案 1 :(得分:1)

您应该获得与此路线相关的所有路线:

php artisan route:list

找到products.show路线以检查是否应该在控制器中获得$ product并删除show()的Request $request

编辑:

Route::apiResource('/products', "ProductController")
->middleware('bindings');

绑定存在于kernel.php中:

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

答案 2 :(得分:1)

在编写路线时发生,不幸的是您添加了空格。

Route::get('/products/{product } ', "ProductController");

但是在这里,您使用的是apiResource并且没有显示任何空格。请仔细检查所有路由,

php artisan route::list

是否存在其他任何 product.show 名称路由。 在那之后得到这个

public function show($id)
    {
       $variable=Product::find($id);
    }
相关问题