【问题标题】:Route Model Binding and encryption on laravellaravel 上的路由模型绑定和加密
【发布时间】:2016-04-20 21:53:21
【问题描述】:

在尝试将加密的公司 ID 绑定到 URL 时,我遇到了一个错误。 我假设我已经包含了我需要的所有东西,并且我可以使用像 companyEncrypt 这样的自定义名称,因为它是一个自定义绑定。

错误:

FatalErrorException in RouteServiceProvider.php line 48:
Class 'App\Providers\App\Company' not found

use Log;
use Crypt;
use App\Company;
use Illuminate\Routing\Router;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

代码:

public function boot(Router $router)
{
    parent::boot($router);

    // An a binder for the encrypted company value.
    $router->bind('companyEncypt', function($encryptedValue) {
        try { 
            $decrypted = Crypt::decrypt($encryptedValue);
        } catch (DecryptException $e) {
            Log::info('Dectypt Exception for the company id');
            dd('error');
        }

        return App\Company::where('id', $decrypted)->first();
    });
}

以前有人遇到过这种情况吗?

【问题讨论】:

    标签: php laravel encryption laravel-5 laravel-5.2


    【解决方案1】:

    您需要通过 Company\App\Company 来指代您的 Company

    替换

    return App\Company::where('id', $decrypted)->first();
    

    return Company::where('id', $decrypted)->first();
    

    错误的原因是当你引用的类名不是完全限定的类名(例如\App\Company)或导入的类名(例如Company 使用 use App\Company 导入它),自动加载器会在当前命名空间中查找类。

    因此,如果您在 App\Providers 命名空间中引用 App\Company,它会尝试加载 App\Providers\App\Company类。

    【讨论】:

    • 有效 8|。非常感谢,你能解释一下区别吗?我从 larvel 站点复制了语法,他们使用 App\Company 方式,但它不起作用,但 Company:: 可以
    • 酷,我虽然这就是为什么我使用 \App 说 root 而不是 app/providers 命名空间。再次感谢! :)
    【解决方案2】:

    您已经在页面的开头添加了 App\Company。这里使用 App\Company;

    像这样使用它:return Company::where('id', $decrypted)->first();

    【讨论】:

      猜你喜欢
      • 2021-05-24
      • 2016-06-04
      • 2017-06-22
      • 1970-01-01
      • 2018-12-17
      • 2017-01-12
      • 2013-10-27
      • 2015-07-12
      • 2020-05-05
      相关资源
      最近更新 更多