Iは、2つのモデル、Thread
とPost
、及び関係(一方Thread
は多くPost
Sを有する)Thread
モデルにおけるposts()
方法で定義されています。 Thread
Sはスラグのフィールドを介して解決される:明示的なモデル結合による経路セグメント名
// in Thread.php...
public function getRouteKeyName()
{
return 'slug';
}
次に、各Post
が1
から出発index
フィールドを有している - それは、配列中のこのPost
の位置を特定します。例えば、
Route::get('threads/{thread}/posts/{post}, '.....');
4
ある経路定義に
/threads/some_thread_slug/posts/4
にPost
のIDではない、それは同じthread_id
有する他Post
Sに関してPost
の指標です。 some_thread_slug
のスラグとThread
次に、上記ルートは(再び、ないid
)4のindex
とPost
に解決する必要があり、10のPost
Sを有し、言い換えれば、:
// Thread $thread is automatically resolved through the 'slug' field...
$post = $thread->posts()->where('index', $index)->first() // $post->index == 4
目標は、今解決することですPost
からindex
までです。私は確かにRouteSerivceProvider
を通してそれを微調整することができますが、問題は、私は親Thread
スラグへのアクセスを持っていないということです。
Route::bind('post', function (int $index) {
// Hmmm.. How do I know which Thread this $index relates to?
// By no means are these indices unique!
});
私のソリューションは、これまで直接URLコンポーネントにアクセスすることによって、親
Thread
を見つけることです
(例えばsome_thread_slug
)、対応するモデルをフェッチする。しかし、Request::segment()
のインデックスが必ずしも同じではないため、危険です。 Laravelはこれに対してより良い解決策を提供していますか?
ありがとう! '\ Illuminate \ Routing \ Route'のように接頭辞' Route'を先頭のバックスラッシュでつけなければなりませんでした。うまくいきます!唯一のことは '$ route-> parameter( 'thread')'は 'string'を返します。ここで 'スレッド'を自動的に解決する方法はありません。 – Alex
あります。 '{thread} 'をルートモデルバインディングを使って' Thread'インスタンスにバインドすると、正しく解決されるはずです。 –
恐ろしい!どうもありがとうございます! – Alex