我需要像以下一样加密所有网址:
user/edit/1
items/edit/35
posts/details/52
到
user/edit/sdfjk54dfds
items/edit/sdfjk54dfds
posts/details/sdfjk5s4dfds
有许多区域,例如blade
个文件,controllers
中的id使用了url('items/edit/2')
,而且在控制器中,某些函数由public function itemedit(Items $items)
等对象传递。
我尝试$encrypt_val = Crypt::encrypt($value)
和$decrypt_val = Crypt::decrypt($encrypt_val );
,但我需要在任何地方都这样做。
有任何简短的方法或中间件功能吗?
答案 0 :(得分:1)
您可以使用Uuid
代替整数id
。为此,请遵循以下说明:
只需创建一个trait
:
trait Uuids
{
/**
* Boot function from laravel.
*/
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->{$model->getKeyName()} = Uuid::generate()->string;
});
}
}
并在您的模型中使用以上特征:
use SomeNamespcaeOfTrait;
class User extends Eloquent
{
use Uuids;
/**
* @var bool
*/
public $incrementing = false;
}
并且在您的迁移中使用uuid
而不是integer
。
答案 1 :(得分:1)
使用Laravel Hashids
您可以对ID进行编码,如下所示
$encoded_id = Hashids::encode($id);
您的网址如下所示
<url>/users/edit/sdfjk54dfds
答案 2 :(得分:0)
有一个名为Laravel HashSlug的程序包可以根据需要运行。与sumit的答案类似,它基于Hashids,但专门设计用于网址。
使用上述软件包,您只需在控制器中添加特征和类型提示:
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'));
}