当我传递用于编辑的加密ID时,Laravel路由模型绑定显示404 [英] Laravel Route Model Binding, shows 404 when i passed encrypted Id for Editing

查看:7
本文介绍了当我传递用于编辑的加密ID时,Laravel路由模型绑定显示404的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在编辑语言表时,我使用了更简单的路由模型绑定方法。但我的客户要求所有通过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已加密,则无法使用路由模型绑定。

但是,您可以自定义为特定模型解析路由模型绑定的方式。 在文件appProvidersRouteServiceProvider.php中,可以使用Route::bind方法。传递给绑定方法的闭包将接收URI段的值,并且应该返回应该注入到路由中的类的实例。同样,此自定义应该在您的应用程序的RouteServiceProvider的引导方法中进行:

use AppModelsLanguage;
use IlluminateSupportFacadesRoute;
use IlluminateSupportFacadesCrypt;
 
/**
 * 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();
    });
 
    // ...
}

这篇关于当我传递用于编辑的加密ID时,Laravel路由模型绑定显示404的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆