我正在使用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');
我的创建视图无法正确显示的任何想法?索引视图显示正常。
答案 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'));
}