Предположим, что в моей таблице 'слова' есть следующие данные:
+----+----------------+
+ id + Title +
+ 1 + Lorem ipsum +
+ 2 + Dolor sit amet +
+----+----------------+
Модель Word
содержит следующую область действия:
// app/Models/Words.php
public function scopeByWords($query, $words)
{
return $query->where('id', wordsToNumber($words));
}
Идея состоит в том, что example.com/one
должновозвращаемый идентификатор строки 1, example.com/two
должен возвращать идентификатор строки 2 и т. д.
Предполагая, что написаны функции wordsToNumber
и numberToWords
, как я могу выполнить привязку модели маршрута в этом случае?Следующий код не работает.Выдает 404.
// routes/web.php
Route::get('/{words}', 'WordsController@show');
// app/Providers/RoutingServiceProvider.php
Route::bind('words', function ($words) {
return Word::byWords($words)->get() ?? abort(404);
});
Если я сделаю это вручную, я смогу вытащить строку:
// app/Http/Controllers/WordsController.php
public function show($words) {
return Word::byWords($words)->get();
}
Я хочу знать, почему не работает следующее:
// app/Http/Controllers/WordsController.php
public function show(Word $words) {
return $words;
}
Это, очевидно, пример проблемы, которую я хочу решить.Фактическое преобразование строки запроса в строку отличается.