【问题标题】:Custom Request class does not exist, yet it does?自定义请求类不存在,但它存在吗?
【发布时间】:2018-02-18 09:38:52
【问题描述】:

我试图弄清楚为什么我的自定义请求类不能被我的一种方法调用。

我使用php artisan make:request ValidateUserSecretRequest 创建了我的课程。

这按预期在Http/Requests 文件夹中创建了我的自定义请求文件。

但是,ValidateUserSecretRequest 在我的Auth\LoginController.php 中调用,我得到Class App\Http\Controllers\Auth\ValidateUserSecretRequest does not exist

这是控制器,去掉了不必要的方法:

namespace App\Http\Controllers\Auth;

use Cache;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

use App\Http\Requests\ValidateSecretUserRequest;
use App\Http\Controllers\Controller;

class LoginController extends Controller
{

    use AuthenticatesUsers;

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

public function postValidateToken(ValidateUserSecretRequest $request)
{
    // get user id and create cache key
    $userId = $request->session()->pull('2fa:user:id');
    $key = $userId . ':' . $request->totp;

    // use cache to store token to blacklist
    Cache::add($key, true, 4);

    // login and redirect user
    Auth::loginUsingId($userId);

    return redirect()->intended($this->redirectTo);
}

还有我的自定义请求类:

namespace App\Http\Requests;

use Cache;
use Crypt;
use Google2FA;
use App\User;
use App\Http\Requests\Request;
use Illuminate\Validation\Factory as ValidatonFactory;
use Illuminate\Foundation\Http\FormRequest;

class ValidateUserSecretRequest extends FormRequest
{

    /**
     *
     * @var \App\User
     */
    private $user;

    /**
     * Create a new FormRequest instance.
     *
     * @param \Illuminate\Validation\Factory $factory
     * @return void
     */
    public function __construct(ValidatonFactory $factory)
    {

        $factory->extend(
            'valid_token',
            function ($attribute, $value, $parameters, $validator) {
                $secret = Crypt::decrypt($this->user->google2fa_secret);
                return Google2FA::verifyKey($secret, $value);
            },
            'Not a valid token'
        );

        $factory->extend(
            'used_token',
            function ($attribute, $value, $parameters, $validator) {
                $key = $this->user->id . ':' . $value;

                return !Cache::has($key);
            },
            'Cannot reuse token'
        );
    }

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        try {
            $this->user = User::findOrFail(
                session('2fa:user:id')
            );
        } catch (Exception $exc) {
            return false;
        }

        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'totp' => 'bail|required|digits:6|valid_token|used_token',
        ];
    }

}

我试过了:

  • 作曲家转储自动加载
  • 作曲家更新
  • 多次挠我的头
  • 使用不同名称的工匠重新创建自定义请求,同样的问题

这到底是怎么回事?

【问题讨论】:

  • 我认为你有一个错字。在您的控制器中,您已经编写了使用 App\Http\Requests\ValidateSecretUserRequest;,而在其他任何地方您已经编写了使用 ValidateUserSecretRequest;

标签: php laravel


【解决方案1】:

您已编写“使用 App\Http\Requests\ValidateSecretUserRequest;”当您使用“ValidateUserSecretRequest”类时,有一个错字。

【讨论】:

    【解决方案2】:

    使用 App\Http\Requests\ValidateSecretUserRequest 时出错;你可以再检查一遍。

    【讨论】:

      【解决方案3】:

      你得到Class App\Http\Controllers\Auth\ValidateUserSecretRequest does not exist,因为它并不存在。错误中的App\Http\Controllers\Auth\ 前缀表示它使用当前命名空间。

      查看ValidateUserSecretRequest - 你应该交换UserSecret 以写出正确的类名。

      【讨论】:

        【解决方案4】:

        你的班级名称错误 你有它作为 App\Http\Requests\ValidateSecretUserRequest; 但实际上是ValidateUserSecretRequest

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-07
          • 2018-03-20
          • 2021-02-21
          • 1970-01-01
          • 2018-11-24
          • 2013-12-11
          • 2018-05-03
          • 1970-01-01
          相关资源
          最近更新 更多