当我的用户对我的对象进行身份验证时,将其正确,但如果未经身份验证,我的对象将变为假。我该如何解决?

阿塔坎

我有 productDetails 功能,它为我提供产品详细信息,如果用户通过身份验证,它可以为产品添加书签。但是当我打开 projectDetail 页面时,如果我未经身份验证,我的产品对象变为 false 我该如何解决?未经身份验证的用户可以查看产品但无法添加书签

public function productDetails($slug, Product $product)
{
    $user = Auth::user();
    $product->load(['user.products' => function ($q) {
        $q->take(15);
    }, 'brand', 'color', 'size', 'images', 'category.products' => function ($q) {
        $q->inRandomOrder()->take(15);
    }]);
    $similarProducts = $product->category->products()->limit(10)->get();
    $similarArr = array();
    foreach ($similarProducts as $similarProduct) {
        $similarProduct = $this->userProductLikeAndBookmark($user, $similarProduct);
        $similarArr[] = $similarProduct;
    }
    $userProducts = $product->user->products;
    $productArr = array();
    foreach ($userProducts as $userProduct) {
        $userProduct = $this->userProductLikeAndBookmark($user, $userProduct);
        $productArr[] = $userProduct;
    }
    dd($productArr);
    $product = $this->userProductLikeAndBookmark($user, $product);
    return view('home.pages.detail', compact('product', 'similarArr', 'productArr'));
}
萨利姆·杰尔布

这是问题所在:

$user = Auth::user();
$product = $this->userProductLikeAndBookmark($user, $product);

当未经$user 身份验证时,为 null,因此userProductLikeAndBookmark 控制器中的whataver函数正在执行,它不接受null作为第一个参数$user

可能的解决方案:

if (auth()->check()) {
  $product = $this->userProductLikeAndBookmark($user, $product);
}
return view('home.pages.detail', compact('product', 'similarArr', 'productArr'));

如果用户未经身份验证,则产品将从 RouteModelBinding 方法注入中按原样返回(不喜欢或添加书签)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档