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();
    });
 
    // ...
}