3

我正在使用 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) ,那么创建路线会转到没有任何数据的资源“显示”视图......

这是创建路线:

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

任何想法为什么我的创建视图没有正确显示?索引视图显示正常。

4

2 回答 2

0

事实证明,为了解决这个问题,我不得不重新安排我的 crud 路线。

在 Show 路线之前创建需要...

于 2015-06-23T01:54:12.577 回答
0

有一个包可以做你想做的事:https ://github.com/balping/laravel-hashslug

另请注意,APP_KEY用作盐并不是一个好主意,因为它可以暴露

使用上面的包,你需要做的就是在控制器中添加一个 trait 和 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'));
}
于 2017-08-11T17:15:17.340 回答