2017-12-09 2 views
0

私は最初のlaravelアプリケーションを構築しています。特定のカテゴリのすべての投稿を表示しようとしています - エラーが発生しました

xカテゴリのすべての投稿を表示しようとしています。

マイルート:

Route::get('/', '[email protected]')->name('home'); 
Route::get('/{id}/{slug?}', '[email protected]')->name('show'); 
Route::get('/categories/{category}', '[email protected]')->name('category'); 

マイカテゴリーモデル:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Category extends Model 
{ 
    public function posts() 
    { 
     return $this->hasMany(Post::class); 
    } 

    public function getRouteKeyName() 
    { 
     return 'slug'; 
    } 
} 

マイカテゴリーコントローラ:

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Category; 

class CategoriesController extends Controller 
{ 
    public function index(Category $category) 
    { 
     $posts = $category->posts; 

     return view('index', compact('posts')); 
    } 
} 

を取得:「申し訳ありませんが、あなたが探しているページができませんでした見つかりました。私が変更された場合

作品:

Route::get('/{id}/{slug?}', '[email protected]')->name('show'); 

へ:

Route::get('/{post}', '[email protected]')->name('show'); 

事前にありがとうございます!

答えて

0

あなたのルート/{id}/{slug?}正規表現は、単語、あなたの他のルートのcategoriesをキャプチャし、期待どおりに動作することを防止しています。ここには2つのオプションがあります:

  • categories/{category}を投稿ルートまで移動します。 Laravelルートは、最初の試合で停止します。
  • そのポストIDルートがバックエンドのルートであれば、私はposts/{id}/{slug?}ようにそれを接頭辞に、あなたにお勧めするもの、{id}はとにかく

    Route::get('/{id}/{slug?}', '[email protected]')->name('show')->where('id', '[0-9]*'); 
    

ことができるかを定義します。フロントエンドの場合は、以前のソリューションのいずれか(またはその両方)を選択します。

+0

ありがとう! '/ {id}/{slug?}'正規表現が他のルートから単語カテゴリを取り込む方法についてもっと教えてください。そしてなぜ{id}を定義するだけでそれを修正したのですか? – wdotis

+0

@wdotis '{id}'は正規表現のプレースホルダです。 'where'で定義しないと、'。* 'のような正規表現です。言い換えれば、すべての単一ルートにマッチします。あなたがwhereでファイルを定義すると、その '。* 'は' [0-9] * 'に変更されます。これは、一致する数字だけを意味します。 – Lloople

+1

あなたは素晴らしいです! – wdotis

0

これは正しく設定されていないルートのように聞こえます。ルートを定義する順序によって問題が発生することがあります。

試して、それが違いを作るかどうかを確認するために代わりタイスのためにルートを定義するには:

Route::get('/{id}/{slug?}', '[email protected]')->name('show'); 
Route::get('/', '[email protected]')->name('home'); 
Route::get('/categories/{category}', '[email protected]')->name('category'); 
0

カテゴリと投稿の間に多人数または1対多の関係がある場合は、それを行うことができます。

Route::get('categories/{category_slug?}',['as'=>'category.show','uses'=>'[email protected]'}) 

とコントローラにあります。

public function Show($category_slug){ 

     $category = Category::where('category_slug',$category_slug)->first(); 


     return view('index',compact('category')); 
    } 

@foreach($category->posts as $post) 
    $post->title 
    $post->content 
@endforeach 
関連する問題