DcotrineFixtureBundle学习

Posted eenio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DcotrineFixtureBundle学习相关的知识,希望对你有一定的参考价值。

根据官方文档对Fixture进行学习

首先使用

composer require --dev doctrine/doctrine-fixtures-bundle

来导入扩展

之后注意,如果symfony版本不是3以下的,需要添加数组元素到AppKernel当中,即下列语句,注意添加到in_array对应的那块

 $bundles[] = new DoctrineBundleFixturesBundleDoctrineFixturesBundle();

 

FixtureBundle本质上可以看作一个php类,创建一个Fixture类,用它来,使用

DoctrineCommonPersistenceObjectManage 的ObjectManage类来托管(persist)需要加入的对象实体,对对象实体进行初始化,之后使用  flush方法来更新入数据库当中
namespace AppDataFixtures;

use AppEntityProduct;
use DoctrineBundleFixturesBundleFixture;
use DoctrineCommonPersistenceObjectManager;

class AppFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        // create 20 products! Bam!
        for ($i = 0; $i < 20; $i++) {
            $product = new Product();
            $product->setName(product .$i);
            $product->setPrice(mt_rand(10, 100));
            $manager->persist($product);
        }

        $manager->flush();
    }
}

 

 
之后命令行执行
php bin/console doctrine:fixtures:load

 

将数据更新入数据库当中

除此之外,如果你想讲services和Fixture相结合的话,你的Fixture就可以当做是一个Services进行使用,可以注入任何东西,实例,这里的就是说可以在Fixture当中添加构造函数,变量等,
注意这里的encoder->encodePassword方法可以对密码进行加密,具体实现不说了,
use SymfonyComponentSecurityCoreEncoderUserPasswordEncoderInterface;

// ...
private $encoder;

public function __construct(UserPasswordEncoderInterface $encoder)
{
    $this->encoder = $encoder;
}

// ...
public function load(ObjectManager $manager)
{
    $user = new User();
    $user->setUsername(‘admin‘);

    $password = $this->encoder->encodePassword($user, ‘pass_1234‘);
    $user->setPassword($password);

    $manager->persist($user);
    $manager->flush();
}

 


同时可以在一个Fixture当中调用另一个Fixture,一个Fixture当中使用
this->addReference(self::ADMIN_USER_REFERENCE, $userAdmin);

 

将$userAdmin变量交给addReference,之后在另一个Fixture当中,使用getReference方法来获得$userAdmin变量,参数为,类名:add时候的别名
$userGroup->addUser($this->getReference(UserFixtures::ADMIN_USER_REFERENCE));

 

具体实例如下
// src/DataFixtures/UserFixtures.php
// ...
class UserFixtures extends Fixture
{
    public const ADMIN_USER_REFERENCE = ‘admin-user‘;

    public function load(ObjectManager $manager)
    {
        $userAdmin = new User(‘admin‘, ‘pass_1234‘);
        $manager->persist($userAdmin);
        $manager->flush();

        // other fixtures can get this object using the UserFixtures::ADMIN_USER_REFERENCE constant
        $this->addReference(self::ADMIN_USER_REFERENCE, $userAdmin);
    }
}

// src/DataFixtures/GroupFixtures.php
// ...
class GroupFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        $userGroup = new Group(‘administrators‘);
        // this reference returns the User object created in UserFixtures
        $userGroup->addUser($this->getReference(UserFixtures::ADMIN_USER_REFERENCE));

        $manager->persist($userGroup);
        $manager->flush();
    }
}

 


个人感觉这个东西和doctrine的getManager方法差不多,都是对对象进行托管,之后更新入数据库当中,


以上是关于DcotrineFixtureBundle学习的主要内容,如果未能解决你的问题,请参考以下文章

「学习笔记」3.31代码学习

20162302 2017-2018-1《程序设计与数据结构》课程总结

如何学习kubernetes,学习kubernetes需要代码基础吗?

几行代码搞定ML模型,低代码机器学习Python库正式开源

DL:深度学习模型优化之模型训练技巧总结之适时自动调整学习率实现代码

Tensorflow学习笔记---2--DCGAN代码学习