1

当我以前编辑语言表时,我使用了更容易的路由模型绑定方法。但我的客户要求所有通过 URL 的 id 都应该加密。在这里我的尝试以 404 失败

编辑.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'));
 }

在此处输入图像描述

4

1 回答 1

1

如果 url 中的模型 id 被加密,则不能使用路由模型绑定。

但是,您可以自定义为特定模型解析路由模型绑定的方式。在文件中app\Providers\RouteServiceProvider.php您可以使用该Route::bind方法。传递给 bind 方法的闭包将接收 URI 段的值,并应返回应注入路由的类的实例。同样,这种定制应该发生在应用程序的启动方法中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();
    });
 
    // ...
}
于 2022-02-18T02:35:20.543 回答