CakePHP 3:尝试获取非对象的 属性
CakePHP 3 : Trying to get property of non-object
我正在开发 CakePHP 3.2 并在 login()
操作中,希望仅允许登录状态为 verified = 1
的用户
public function login()
{
if ($this->request->is('post') || $this->request->query('provider')) {
$user = $this->Auth->identify();
if ($user) {
if ($user->verified != 1) { // LINE 6
$this->Flash->error(__('You have not yet verified your account. Please check your email to verify your account before login'), [
'params' => [
'userId' => $user->id, // LINE 9
],
['escape' => false]
]);
$this->redirect(['action' => 'login']);
}
$this->Auth->setUser($user);
$this->_setCookie();
$this->Flash->success('Login Success');
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
但这给出了错误
Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 6]
Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 9]
Warning (2): Cannot modify header information - headers already sent by (output started at /var/www/html/argoSystems/projects/project_01/site/vendor/cakephp/cakephp/src/Error/Debugger.php:746) [CORE/src/Network/Session.php, line 572]
Warning (2): session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent [CORE/src/Network/Session.php, line 576]
NOTE : line number has been changed to meet code snippets
解决了我的问题。这是我更新的 login()
方法。
public function login()
{
if ($this->request->is('post') || $this->request->query('provider')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
if ($this->Auth->user('verified') != 1) {
$this->Flash->error(__('You have not yet verified your account. Please check your email to verify your account before login'), [
'params' => [
'userId' => $this->Auth->user('id'),
],
['escape' => false]
]);
return $this->redirect($this->Auth->logout());
}
$this->_setCookie();
$this->Flash->success('Login Success');
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
你本可以轻松解决这个问题的!例如从
更改第 6 行
if ($user->verified != 1) { // LINE 6
至
$user["verified"] != 1) { // LINE 6
我正在开发 CakePHP 3.2 并在 login()
操作中,希望仅允许登录状态为 verified = 1
public function login()
{
if ($this->request->is('post') || $this->request->query('provider')) {
$user = $this->Auth->identify();
if ($user) {
if ($user->verified != 1) { // LINE 6
$this->Flash->error(__('You have not yet verified your account. Please check your email to verify your account before login'), [
'params' => [
'userId' => $user->id, // LINE 9
],
['escape' => false]
]);
$this->redirect(['action' => 'login']);
}
$this->Auth->setUser($user);
$this->_setCookie();
$this->Flash->success('Login Success');
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
但这给出了错误
Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 6]
Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 9]
Warning (2): Cannot modify header information - headers already sent by (output started at /var/www/html/argoSystems/projects/project_01/site/vendor/cakephp/cakephp/src/Error/Debugger.php:746) [CORE/src/Network/Session.php, line 572]
Warning (2): session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent [CORE/src/Network/Session.php, line 576]
NOTE : line number has been changed to meet code snippets
解决了我的问题。这是我更新的 login()
方法。
public function login()
{
if ($this->request->is('post') || $this->request->query('provider')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
if ($this->Auth->user('verified') != 1) {
$this->Flash->error(__('You have not yet verified your account. Please check your email to verify your account before login'), [
'params' => [
'userId' => $this->Auth->user('id'),
],
['escape' => false]
]);
return $this->redirect($this->Auth->logout());
}
$this->_setCookie();
$this->Flash->success('Login Success');
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
你本可以轻松解决这个问题的!例如从
更改第 6 行if ($user->verified != 1) { // LINE 6
至
$user["verified"] != 1) { // LINE 6