Laravel 5 Маршрут привязки и Хашид
Я использую Хашид, чтобы скрыть идентификатор ресурса в Laravel 5.
Вот привязка маршрута в файле маршрутов:
Route::bind('schedule', function($value, $route)
{
$hashids = new Hashids\Hashids(env('APP_KEY'),8);
if( isset($hashids->decode($value)[0]) )
{
$id = $hashids->decode($value)[0];
return App\Schedule::findOrFail($id);
}
App::abort(404);
});
И в модели:
public function getRouteKey()
{
$hashids = new \Hashids\Hashids(env('APP_KEY'),8);
return $hashids->encode($this->getKey());
}
Теперь это прекрасно работает, ресурс отображается отлично, и идентификатор хэшируется. НО, когда я иду к моему маршруту создания, это 404 - если я удаляю App::abort(404), путь создания переходит в представление 'show' ресурса без каких-либо данных...
Вот маршрут создания:
Route::get('schedules/create', [
'uses' => 'SchedulesController@create',
'as' => 'schedules.create'
]);
Шоу-маршрут:
Route::get('schedules/{schedule}', [
'uses' => 'Schedules Controller@show',
'as' => 'schedules.show'
]);
Я также привязываю модель к маршруту:
Route::model('schedule', 'App\Schedule');
Любые идеи, почему мой вид создания не отображается правильно? Индексный вид отображается нормально.
2 ответа
Есть пакет, который делает именно то, что вы хотите сделать: https://github.com/balping/laravel-hashslug
Также обратите внимание, что это не очень хорошая идея, чтобы использовать APP_KEY
как соль, потому что это может быть выставлено.
Используя вышеупомянутый пакет, все, что вам нужно сделать, это добавить черту и подсказку в контроллер:
class Post extends Model {
use HasHashSlug;
}
// routes/web.php
Route::resource('/posts', 'PostController');
// app/Http/Controllers/PostController.php
public function show(Post $post){
return view('post.show', compact('post'));
}
Оказывается, чтобы решить это, я должен был изменить свои грубые маршруты.
Создать нужно, чтобы приехать до Показать маршрут...