Laravel:auth()->尝试未定义的方法

Mat*_*ias 3 laravel visual-studio-code laravel-blade

一切似乎都正常,但 VSCODE 在尝试时不断报告错误。说方法还没有定义。

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class RegisterController extends Controller
{
    public function index()
    {
        return view('auth.register');
    }

    public function store(Request $request)
    {
        //validation
        $this->validate($request, [
            'name' => 'required|max:50',
            'username' => 'required|max:50',
            'email' => 'required|email|max:250',
            'password' => 'required|confirmed',
        ]);
        //create new user
        User::create([
            'name' => $request->name,
            'username' => $request->username,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        auth()->attempt($request->only('email','password'));

        return redirect()->route('dashboard');

        //sign the user in
        //redirect
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 vscode 的问题还是我遗漏了什么?

s3c*_*s3c 7

所以我想我遵循了TraversyMedia的嘉宾 Alex 的相同教程,并偶然发现了同样的问题。

\n

虽然抑制诊断显然有效,但这并不完全是我想要的(不会接受)。

\n

在这种情况下,该方法attempt存在,所以我只希望很棒的 Intelephense 扩展能够识别它。

\n

我将尝试解释,以便它不仅仅适用于这种情况。

\n

解决方案

\n

Ctrl + click应该auth()有该方法将我们带到helpers.php定义该函数的文件。

\n

在那里我们看到了一小段带有if语句的代码,但无论哪种方式它都会返回相同的类,即AuthFactory.

\n

所以我们再次Ctrl + click发现AuthFactory自己盯着Factory命名空间接口Illuminate\\Contracts\\Auth

\n

现在我们可以使用 PHPDocs 告诉 Intelephenseattempt可以在此接口的实例上使用名为的方法。interface Factory请注意下面完整代码中声明上方的“注释”(PHPDocs) 。

\n
<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\n/**\n * @method attempt\n */\ninterface Factory\n{\n    /**\n     * Get a guard instance by name.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Auth\\Guard|\\Illuminate\\Contracts\\Auth\\StatefulGuard\n     */\n    public function guard($name = null);\n\n    /**\n     * Set the default guard the factory should serve.\n     *\n     * @param  string  $name\n     * @return void\n     */\n    public function shouldUse($name);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

瞧\xc3\xa0!

\n

笔记

\n

只有当该方法确实存在时才应该这样做,否则你就是在钉死自己的棺材。

\n