在 laravel 中调用两个控制器

我已经开始着手创建一个用于展示放大器的网站,并在下面提供评论部分。因此,我设法让我的放大器详细信息自行显示,并且与评论/评论相似。然而,我的观点的问题是,当我同时调用两者时,我得到错误“Facade\Ignition\Exceptions\ViewException Undefined variable: product (View: C:\XAMPP\htdocs\Term_One_Assignment_Benjamin_Robinson_U1655703\resources\views\product\product.blade. php)"


现在我知道它们可以单独正常工作,但以前从未调用过这样的东西。


Web.php(路由)


Route::get('products/','ProductsController@index');

Route::get('product/{product}/', 'ProductsController@show');

Route::get('product/{product}/', 'CommentController@comment');

控制器放大器


<?php


namespace App\Http\Controllers;


use App\Product;

//use App\Comment;

use Illuminate\Http\Request;


class ProductsController extends Controller

{

    public function show (Product $product)

    {

        return view ('product.product') -> with (['product' => $product]);

    }


}

评论控制器


<?php


namespace App\Http\Controllers;


use App\Comment;

use Illuminate\Http\Request;

use Illuminate\Database\Eloquent;


class CommentController extends Controller

{


    public function comment (){

        $comments = Comment::all ();

        return view ('product.product', compact ('comments'));

    }

我知道这可能很微不足道,但只是想知道是否有人有任何想法,因为 Laravel 的故障查找非常糟糕。

有谁知道为什么这不起作用以及为什么会抛出该错误?


桃花长相依
浏览 168回答 3
3回答

慕勒3428872

仅选择一个控制器,然后将所有必要的代码放在上面,如下所示:路线:Route::get('product/{product}/', 'ProductsController@show');控制器:class ProductsController extends Controller{&nbsp; &nbsp; public function show (Product $product)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $product&nbsp; = Product::find(1);&nbsp; &nbsp; &nbsp; &nbsp; $comments = Comment::all();&nbsp; &nbsp; &nbsp; &nbsp; return view ('product.product', compact ('product', 'comments'));&nbsp; &nbsp; }}

不负相思意

首先,您不能两次使用相同的路线。Route::get('product/{product}/', 'ProductsController@show');Route::get('product/{product}/', 'CommentController@comment');如果你可以这样做:Route::get('product/{product}/', 'ProductsController@show');Route::get('product/{product}/comments', 'CommentController@comment');或者简单地保留一条路线并使用单个控制器访问(产品和评论)。根据您的共享视图,它需要模型数据产品和评论集合。

largeQ

您可以在 route.php 中定义相同的路由。但第一条路线将被忽略。请尝试执行以下操作。Route::get('product/{product}/show', 'ProductsController@show');Route::get('product/{product}/comment', 'CommentController@comment');
打开App,查看更多内容
随时随地看视频慕课网APP