сегментные У меня есть две модели, Thread
и Post
и отношения (один Thread
имеет много Post
с) определяется в posts()
методов в Thread
модели. Thread
ы разрешаются через поле Slug:Явная модель связывания с использованием маршрутных имен
// in Thread.php...
public function getRouteKeyName()
{
return 'slug';
}
Теперь каждый Post
имеет index
поле, начиная с 1
- он идентифицирует положение этого Post
в последовательности. Например, в
/threads/some_thread_slug/posts/4
с определением маршрута будучи
Route::get('threads/{thread}/posts/{post}, '.....');
4
НЕ идентификатор Post
, это индекс Post
по отношению к другим Post
с с той же thread_id
. Другими словами, если Thread
с пробкой из some_thread_slug
имеет 10 Post
с, то выше маршрут должен преобразовываться в Post
с index
(опять-таки, не id
) 4:
// Thread $thread is automatically resolved through the 'slug' field...
$post = $thread->posts()->where('index', $index)->first() // $post->index == 4
Цель состоит в том, чтобы сейчас решение Post
s через index
. Я могу, конечно, настроить его через RouteSerivceProvider
, но проблема в том, что у меня нет доступа к родительским Thread
Slug:
Route::bind('post', function (int $index) {
// Hmmm.. How do I know which Thread this $index relates to?
// By no means are these indices unique!
});
Мое решение до сих пор найти родителей Thread
путем прямого доступа к компоненту URL (например, some_thread_slug
) и выборку соответствующей модели. НО это опасно, потому что индекс в Request::segment()
не всегда одинаковый. Предлагает ли Laravel для этого лучшее решение?
Спасибо! Я должен был сделать префикс 'Route' следующим образом:' \ Illuminate \ Routing \ Route', с ведущей обратной косой чертой. Работает хорошо! Единственное значение - параметр $ route-> ('thread') 'возвращает' string'. Невозможно автоматически разрешить «Thread» здесь, правильно? – Alex
Существует. Если вы привязываете '{thread}' к экземпляру 'Thread', используя привязку маршрутной модели, он должен корректно разрешаться. –
Удивительный! Спасибо огромное! – Alex