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'));
}

Оказывается, чтобы решить это, я должен был изменить свои грубые маршруты.

Создать нужно, чтобы приехать до Показать маршрут...

Другие вопросы по тегам