我正在尝试实现这个包 - https://github.com/vinkla/hashids来混淆 URL 中的所有 id。
我创建了一个全新安装的 laravel 5.2 并创建了一个名为 Orange.php 的模型,其中填充了表格-
INSERT INTO `oranges` (`id`, `orange_name`) VALUES(1, 'test1'),(2, 'test2'),(3, 'test3');
我将以下内容添加到 routes.php-
Route::bind('id', function ($id, $route) {
return Hashids::decode($id)[0];
});
Route::resource('orange', 'OrangeController');
Route::model('orange', 'App\Orange');
我还通过向 Orange.php 添加以下函数来覆盖 getRouteKey-
public function getRouteKey()
{
return Hashids::encode($this->getKey());
}
因此 getRouteKey 应该对 ID 进行编码以显示 URL,例如 3 转到 hgfdh,然后我的路由绑定应该通过“id”通配符将自身应用于任何使用 id 参数的路由,以在这种情况下解码 OrangeController.php 的 ID。
尝试加载 http://localhost:8000/orange/3-时收到以下两个错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'orange_name:"test3"' in 'where clause'
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'orange_name:"test3"' in 'where clause' (SQL: select count(*) as aggregate from `oranges` where `orange_name` = test3 and `orange_name:"test3"` <> {"id":3 and `created_at:"2016-06-23 09:30:39"` = updated_at:"2016-06-23 09:30:39"})
我认为这个错误与 -
Route::model('orange', 'App\Orange');
它是否试图绑定 Orange 的实例而不是 Orange 的 $id?如果是这样,我如何绑定 $id?
如果我注释掉 Route::model 定义我得到-
NotFoundHttpException in Handler.php line 103:
No query results for model [App\Orange].