Product $product 为什么能直接获取到当前 id 的商品

public function show(Product $product, Request $request)
    {
        // 判断商品是否已经上架,如果没有上架则抛出异常。
        if (!$product->on_sale) {
            throw new \Exception('商品未上架');
        }

        return view('products.show', ['product' => $product]);
    }

url里面放的是id,为什么不用find就能直接获取到商品?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
6年前 评论
讨论数量: 3
shubiao-yao

看调用show方法的地方

6年前 评论
long2ge

这样子写有一个缺陷。
假如我在地址栏输入一个很大的数(例如http://shop.test/products/10000),就会跳转到Page Not Found页面而不是错误页面。
可以改成这样子写。


public function show(int $product, Request $request)
    {
        $product = Product::find($product);
        // 判断商品是否已经上架,如果没有上架则抛出异常。
        if (!$product || !$product->on_sale) {
            throw new InvalidRequestException('商品未上架');
        }
        .
        .
        .
    }

这样子在地址栏输入一个很大的数就也会跳转到商品未上架的页面了。

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!