Laravel 5路线绑定和Hashid

时间:2015-06-23 01:33:21

标签: php routes laravel-5 hashids

我正在使用Hashid来隐藏Laravel 5中资源的ID。

这是路由文件中的路由绑定:

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

现在这可以很好地完成资源显示并且ID被哈希处理。 但是当我进入我的创建路线时,它是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 个答案:

答案 0 :(得分:0)

原来要解决这个问题,我不得不重新安排我的粗线路。

在显示路线之前需要创建......

答案 1 :(得分:0)

有一个包完全符合您的要求:https://github.com/balping/laravel-hashslug

另请注意,将APP_KEY用作盐是不可取的,因为it can be exposed

使用上述软件包,您只需在控制器中添加特征和类型提示:

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