由于两个表之间的外键约束而无法登录
Unable to login due to Foreign key constraint between two tables
我有两个table'User'和'Address',还有OneToOne 它们之间的关系,因为 用户 table 有一列 'address_id' 存储地址 table 的 'id'。
这是用户实体中的注释:
/**
* @ORM\OneToOne(targetEntity="App\Entity\address", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $address;
Security.yaml:
security:
encoders:
App\Entity\User:
algorithm: bcrypt
providers:
my_provider:
entity:
class: App\Entity\User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
form_login:
login_path: login
check_path: login
provider: my_provider
default_target_path: dashboard
logout:
path: /logout
target: /
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/dashboard, roles: ROLE_USER }
控制器:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="login")
*/
public function login(Request $request,AuthenticationUtils $utils)
{
// get the login error if there is one
$error = $utils->getLastAuthenticationError();
// dump($error);die;
// last username entered by the user
$lastUsername = $utils->getLastUsername();
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error
]);
}
public function logout()
{
# code...
}
}
我在输入用户名和密码时出现此错误:
Authentication request could not be processed due to a system problem.
这是我在控制器中转储()错误时得到的结果。
SecurityController.php on line 20:
AuthenticationServiceException {#189 ▼
-token: UsernamePasswordToken {#236 ▶}
#message: "The target-entity App\Entity\address cannot be found in 'App\Entity\User#address'."
#code: 0
#file: "/home/users/kumar.saurabh/www/html/symfony/test-project/vendor/symfony/security-core/Authentication/Provider/DaoAuthenticationProvider.php"
#line: 85
trace: {▶}
}
当我删除 $address 变量及其 getter 和 setter 函数时,登录工作正常,但是当我使用它时,出现上述错误。
如何使用外键实现此目的?我是 symfony 的新手,正在学习 4.2 版本。
注意大小写,将 App\Entity\address 替换为 App\Entity\Address,更新您的架构,应该没问题
/**
* @ORM\OneToOne(targetEntity="App\Entity\address", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $address;
应该是
/**
* @ORM\OneToOne(targetEntity="App\Entity\Address", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $address;
我有两个table'User'和'Address',还有OneToOne 它们之间的关系,因为 用户 table 有一列 'address_id' 存储地址 table 的 'id'。
这是用户实体中的注释:
/**
* @ORM\OneToOne(targetEntity="App\Entity\address", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $address;
Security.yaml:
security:
encoders:
App\Entity\User:
algorithm: bcrypt
providers:
my_provider:
entity:
class: App\Entity\User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
form_login:
login_path: login
check_path: login
provider: my_provider
default_target_path: dashboard
logout:
path: /logout
target: /
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/dashboard, roles: ROLE_USER }
控制器:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="login")
*/
public function login(Request $request,AuthenticationUtils $utils)
{
// get the login error if there is one
$error = $utils->getLastAuthenticationError();
// dump($error);die;
// last username entered by the user
$lastUsername = $utils->getLastUsername();
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error
]);
}
public function logout()
{
# code...
}
}
我在输入用户名和密码时出现此错误:
Authentication request could not be processed due to a system problem.
这是我在控制器中转储()错误时得到的结果。
SecurityController.php on line 20: AuthenticationServiceException {#189 ▼ -token: UsernamePasswordToken {#236 ▶} #message: "The target-entity App\Entity\address cannot be found in 'App\Entity\User#address'." #code: 0 #file: "/home/users/kumar.saurabh/www/html/symfony/test-project/vendor/symfony/security-core/Authentication/Provider/DaoAuthenticationProvider.php" #line: 85 trace: {▶} }
当我删除 $address 变量及其 getter 和 setter 函数时,登录工作正常,但是当我使用它时,出现上述错误。
如何使用外键实现此目的?我是 symfony 的新手,正在学习 4.2 版本。
注意大小写,将 App\Entity\address 替换为 App\Entity\Address,更新您的架构,应该没问题
/**
* @ORM\OneToOne(targetEntity="App\Entity\address", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $address;
应该是
/**
* @ORM\OneToOne(targetEntity="App\Entity\Address", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $address;