You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony DataFixtures使用UserPasswordHasher哈希密码时字符串转换错误求助

Symfony DataFixtures 密码哈希报错解决:UserPasswordHasher无法转为字符串

问题描述

执行命令 php bin/console doctrine:fixtures:load 时出现严重错误:

Object of class Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher could not be converted to string

错误原因及修复

1. 构造函数语法错误

原代码构造函数中存在属性赋值错误:

public function __construct(UserPasswordHasherInterface $hasher)
{
    $this->$hasher = $hasher; // 错误:多写了一个$符号,程序尝试将对象转为字符串作为属性名
}

修复方式:去掉多余的$,正确赋值给类属性:

public function __construct(UserPasswordHasherInterface $hasher)
{
    $this->hasher = $hasher;
}

2. 管理员用户密码赋值错误

原代码创建管理员用户时,错误地将哈希密码赋值给了普通用户$user,而非管理员对象$userAdmin:

$hashPassword = $this->hasher->hashPassword($userAdmin, 'password');
$user->setPassword($hashPassword); // 错误:覆盖普通用户密码,管理员密码未设置

修复方式:改为赋值给$userAdmin:

$hashPassword = $this->hasher->hashPassword($userAdmin, 'password');
$userAdmin->setPassword($hashPassword);

修正后的完整代码

<?php

namespace App\DataFixtures;

use App\Entity\Author;
use App\Entity\Book;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;

class AppFixtures extends Fixture
{
    private UserPasswordHasherInterface $hasher;

    public function __construct(UserPasswordHasherInterface $hasher)
    {
        $this->hasher = $hasher;
    }

    public function load(ObjectManager $manager): void
    {
        // 创建普通用户
        $user = new User();
        $user->setEmail('user@bookapi.com');
        $user->setRoles(['ROLE_USER']);
        $hashPassword = $this->hasher->hashPassword($user, 'password');
        $user->setPassword($hashPassword);
        $manager->persist($user);

        // 创建管理员用户
        $userAdmin = new User();
        $userAdmin->setEmail('admin@bookapi.com');
        $userAdmin->setRoles(['ROLE_ADMIN']);
        $hashPassword = $this->hasher->hashPassword($userAdmin, 'password');
        $userAdmin->setPassword($hashPassword);
        $manager->persist($userAdmin);

        // 创建作者
        $listAuthors = [];
        for ($i = 0; $i < 10; $i++){
            $author = new Author();
            $author->setLastname('Nom' . $i);
            $author->setFirstname('Prénom' . $i);
            $manager->persist($author);
            // 将创建的作者保存到数组中
            $listAuthors[]= $author;
        }

        // 创建书籍
        for ($i = 0; $i < 20; $i++){
            $book = new Book();
            $book->setTitle('Titre'.$i);
            $book->setCoverText('Quatrieme de couverture numéro:'.$i);
            // 将书籍与数组中随机选取的作者关联
            $book->setAuthor($listAuthors[array_rand($listAuthors)]);
            $manager->persist($book);
        }

        $manager->flush();
    }
}

内容的提问来源于stack exchange,提问作者Halit Cinici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:10:55