2016-12-20 7 views
0

私は最初にすべての製品を表示し、サイドバーにはカテゴリのリストを表示できるビューで作業しています。私の目標は、ユーザーが任意のカテゴリを押すと、そのカテゴリの製品のみを表示することです。しかし、2つのコントローラがこのビューとやり取りして同じデータを送信しているので、1つは実行されていません(CategoriesController)。エラーは表示されません。各カテゴリのリンクをクリックすると、ページがリロードされません。ここ は私のProductsControllerです:Laravel 5.3複数のコントローラを1つのビューで使用する方法

class ProductsController extends Controller 
{ 
    // display all products and categories 
    public function index() { 
     $products = Product::all(); 
     $categories = Category::all(); 
     return view('frontend.product', compact('products','categories')); 
    } 

そして、私のCategoriesController:ここ

class CategoriesController extends Controller 
{ 
public function showProducts($category_id) { 
     $products = Category::find($category_id)->products; 
     return view('frontend.product', compact('products')); 
    } 

が私の見解です:

// Products part 
@foreach($products as $product) 
    {{ $product->name }} 
@endforeach 
//Categories part 
@foreach($categories as $category) 
    <a href="{{ route('categories', [$category->id]) }}">{{ $category->name }} </a> 
@endforeach 

とルート:

Route::get('/products', [ 'as' => 'products', 'uses' => 'frontend\[email protected]']); 
Route::get('/categories/{category_id}', ['as' => 'categories', 'uses' => 'backend\[email protected]']); 
+0

、その1 'の一つが実行されていませんか'?エラーは何ですか?ところで、あなたは 'CategoriesController'からカテゴリのリストを渡すことはありません。 –

+0

また、SEO目的のためにURLを変更することをお勧めします。この回答を見てください:http://stackoverflow.com/questions/27598967/laravel-routing-varying#answer-27658499 –

+0

私は質問を更新しました。はい、私はリストを渡していません。私はそれを追加しましたが、それは問題を解決しません –

答えて

1

ただのすべてを含んでカテゴリあなたのshowProducts機能におけるES、および現在のカテゴリを省略:

public function showProducts($category_id) 
{ 
    $categories = Category::whereNotIn('id', $category_id)->get(); 
    $products = Category::find($category_id)->products; 
    return view('frontend.product', compact('products', 'categories')); 
} 

は今使用されている変数の間には矛盾はありません。

+0

申し訳ありませんが動作しませんでした。 –

0

私が誤解していない場合は、ブレードに@injectを使用できると思いました。たとえば:

namespace App\Presenters; 

use App\User; 

class UserPresenter 
{ 
    /** 
    * 是否顯示email 
    * @param User $user 
    * @return string 
    */ 
    public function showEmail(User $user) 
    { 
     if ($user->show_email == 'Y') 
      return '<h2>' . $user->email . '</h2>'; 
     else 
      return ''; 
    } 
} 

<div> 
    @inject('userPresenter', 'MyBlog\Presenters\UserPresenter') 
    @foreach($users as $user) 
    <div> 
     {!! $userPresenter->showEmail($user) !!} 
    </div> 
</div> 
関連する問題