本文实例讲述了Symfony2实现在doctrine中内置数据的方法。分享给大家供大家参考,具体如下:
我们在使用symfony的时候,有时需要在数据库中内置一些数据,那么我们如何在doctrine中设置呢?
所幸,symfony已经为我们封装好了。这里,我们需要用到DoctrineFixturesBundle。
第一步,在composer.json中引入所需的DoctrineFixturesBundle:
1
2
3
4
5
|
{
"require" : {
"doctrine/doctrine-fixtures-bundle" : "2.2.*"
}
}
|
第二步,执行composer:
1
|
composer update doctrine/doctrine-fixtures-bundle
|
第三步,在内核(app/AppKernel.php)中注册此bundle:
1
2
3
4
5
6
7
8
9
10
|
// ...
public function registerBundles()
{
$bundles = array (
// ...
new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
// ...
);
// ...
}
|
第四步,在需要内置数据的bundle下创建一个PHP类文件,如src/Acme/HelloBundle/DataFixtures/ORM/LoadUserData.php,其代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// src/Acme/HelloBundle/DataFixtures/ORM/LoadUserData.php
namespace Acme\HelloBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Acme\HelloBundle\Entity\User;
class LoadUserData implements FixtureInterface
{
/**
* {@inheritDoc}
*/
public function load(ObjectManager $manager )
{
$userAdmin = new User();
$userAdmin ->setUsername( 'admin' );
$userAdmin ->setPassword( 'test' );
$manager ->persist( $userAdmin );
$manager -> flush ();
}
}
|
第五步,通过console执行内置数据命令:
1
|
php app/console doctrine:fixtures:load #为防止数据库中原先的值被清除,可使用 --append 参数
|
此命令有以下三个参数:
–fixtures=/path/to/fixture – Use this option to manually specify the directory where the fixtures classes should be loaded;
–append – Use this flag to append data instead of deleting data before loading it (deleting first is the default behavior);
–em=manager_name – Manually specify the entity manager to use for loading the data.
官方文档:http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
本文永久地址:http://blog.it985.com/6662.html
本文出自 IT985博客 ,转载时请注明出处及相应链接。
希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。