2015-06-23 2 views
1

Я использую Хашид, чтобы скрыть идентификатор ресурса в 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), маршрут создания переходит к представлению ресурса «показать» без каких-либо данных ...

Вот Создать маршрут:

Route::get('schedules/create', [ 
    'uses' => '[email protected]', 
    'as' => 'schedules.create' 
]); 

Шоу маршрут:

Route::get('schedules/{schedule}', [ 
    'uses' => 'Schedules [email protected]', 
    'as' => 'schedules.show' 
]); 

Я также привязки модели к маршруту:

Route::model('schedule', 'App\Schedule'); 

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

ответ

0

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

НАПИСАТЬ необходимо прийти до Показать маршрут ...

0

Там есть пакет, который делает именно то, что вы хотите сделать: https://github.com/balping/laravel-hashslug

Также обратите внимание, что это не очень хорошая идея использовать APP_KEY как соль потому что it can be exposed.

Используя вышеупомянутый пакет все, что вам нужно сделать, это добавить черту и typehint в контроллере:

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')); 
} 
Смежные вопросы