Laravel 路由模型绑定,当我传递加密的 Id 进行编辑时显示 404
Laravel Route Model Binding, shows 404 when i passed encrypted Id for Editing
以前编辑Language的时候table用过route model binding的方法,比较简单。但是我的客户要求所有通过 URL 的 id 都应该被加密。在这里我的尝试失败了 404
edit.blade.blade
<a href="{{ route('admin.languages.edit', ['language' => encrypt($language->id)]) }}">
<i class="icon-note icons"></i>
</a>
语言控制器
public function edit(Language $language)
{
return view('admin.language.edit',compact('language'));
}
如果 url 中的模型 ID 已加密,则无法使用路由模型绑定。
但是,您可以自定义为特定模型解析路由模型绑定的方式。
在文件 app\Providers\RouteServiceProvider.php
中,您可以使用 Route::bind
方法。您传递给 bind 方法的闭包将接收 URI 段的值,并且应该 return 应该注入路由的 class 的实例。同样,此自定义应在应用程序 RouteServiceProvider
:
的引导方法中进行
use App\Models\Language;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Crypt;
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
Route::bind('language', function ($value) {
$id = Crypt::decryptString($value);
return Language::where('id', $value)->firstOrFail();
});
// ...
}
以前编辑Language的时候table用过route model binding的方法,比较简单。但是我的客户要求所有通过 URL 的 id 都应该被加密。在这里我的尝试失败了 404
edit.blade.blade
<a href="{{ route('admin.languages.edit', ['language' => encrypt($language->id)]) }}">
<i class="icon-note icons"></i>
</a>
语言控制器
public function edit(Language $language)
{
return view('admin.language.edit',compact('language'));
}
如果 url 中的模型 ID 已加密,则无法使用路由模型绑定。
但是,您可以自定义为特定模型解析路由模型绑定的方式。
在文件 app\Providers\RouteServiceProvider.php
中,您可以使用 Route::bind
方法。您传递给 bind 方法的闭包将接收 URI 段的值,并且应该 return 应该注入路由的 class 的实例。同样,此自定义应在应用程序 RouteServiceProvider
:
use App\Models\Language;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Crypt;
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
Route::bind('language', function ($value) {
$id = Crypt::decryptString($value);
return Language::where('id', $value)->firstOrFail();
});
// ...
}