Laravel 9控制器中如何创建全局数组变量?解决未定义变量报错
解决Laravel控制器中公共属性访问报错的问题
你遇到的Undefined variable $loginCred错误,核心原因是在类方法中访问自身的公共属性时,没有使用$this->前缀,PHP会把直接写的$loginCred当成局部变量,而非你定义的类属性。
另外你的callback方法里还有逻辑错误:$loginCred是数组类型,不能直接调用session()方法,这里应该直接操作session实例。
修正后的代码:
class AuthController extends Controller { public $loginCred = []; public function postLogin(Request $request){ // 使用$this->访问类的公共属性 $request['email'] = $this->loginCred['email']; $request['password'] = $this->loginCred['password']; // 后续代码... return redirect()->away($authUrl); } public function callback(Request $request) { // 正确的session重写写法 $request->session()->regenerate(); // 若需将loginCred存入session,可添加此行 // $request->session()->put('login_cred', $this->loginCred); return redirect()->route('home'); } }
补充说明:
- 类的非静态属性必须通过
$this->属性名在类内部方法中访问;若是静态属性,才用self::属性名或类名::属性名。 - 如果你想在多个请求之间共享
loginCred的数据,控制器的公共属性无法实现(每个请求都会实例化新的控制器对象),这种场景下应该用Session或缓存来存储数据。
内容的提问来源于stack exchange,提问作者Joshua Anrico
相关产品推荐
相关产品推荐

