Symfony 4 EasyAdminBundle:纯密码的编码和保存问题

这些是我使用 Symfony 的第一步。我尝试在 Symfony 4.4 中使用 Easyadmin Bundle 实现简单的用户管理。我按照 symfony.com 上的教程进行操作,其中大部分工作正常(注册表单、后端登录、后端安全性、数据库中用户的后端列表)。

我的问题是在 Easyadmin 后端创建和更新用户。当我尝试创建新用户时,我看到了正确的字段,我确实输入了一些数据,如果我单击“保存更改”,则会引发以下错误:

An exception occurred while executing 'INSERT INTO app_users (username, email, roles, password, is_active) VALUES (?, ?, ?, ?, ?)' with params ["testname", "test@example.com", "a:1:{i:0;s:9:\"ROLE_USER\";}", null, 1]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'password' cannot be null

列“密码”不能为空很清楚:我需要为它提供一些编码的密码字符串。

我认为我输入的纯密码字段中的数据没有被我的用户实体中的 setPassword() 方法编码和/或处理。

据我了解一些 SO 答案和 Symfony 文档,它应该自动工作!?我不知道。我试图创建一个扩展 EasyAdminController 的 AdminController 并将其挂接到用户实体持久化的某个地方,但我无法让它工作。(像这样:https ://stackoverflow.com/a/54749433 )

如何处理/编码保存到数据库中密码字段的纯密码?


慕妹3242003
浏览 84回答 1
1回答

LEATH

我现在可以回答我自己的问题:解决方案:我只是忘记在 Easyadmin 路由中引用控制器:# config/routes/easy_admin.yamleasy_admin_bundle:    resource: 'App\Controller\AdminController'    prefix: /admin    type: annotation这是针对有相同问题的每个人的完整控制器:// src/Controller/AdminController.phpnamespace App\Controller;use App\Entity\User;use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;use EasyCorp\Bundle\EasyAdminBundle\Controller\EasyAdminController;class AdminController extends EasyAdminController{    private $passwordEncoder;    public function __construct(UserPasswordEncoderInterface $passwordEncoder)    {        $this->passwordEncoder = $passwordEncoder;    }    private function encodeUserPlainPassword($user)    {        $plainPassword = $user->getPlainPassword();        if (!empty($plainPassword)) {            $encoded = $this->passwordEncoder->encodePassword($user, $plainPassword);            $user->setPassword($encoded);        }    }    public function persistEntity($user)    {        $this->encodeUserPlainPassword($user);        parent::persistEntity($user);    }    public function updateEntity($user)    {        $this->encodeUserPlainPassword($user);        parent::updateEntity($user);    }}
打开App,查看更多内容
随时随地看视频慕课网APP