zend-blog-3-backend

Форк
0
143 строки · 5.6 Кб
1
<?php
2

3
namespace Mtt\TestBundle\DataFixtures\ORM;
4

5
use App\Entity\Post;
6
use App\Service\TextProcessor;
7
use App\Utils\RuTransform;
8
use Doctrine\Bundle\FixturesBundle\Fixture;
9
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
10
use Doctrine\Common\Persistence\ObjectManager;
11
use Doctrine\Persistence\ObjectManager as ObjectManagerInterface;
12
use Faker\Factory as FakerFactory;
13
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
14
use Symfony\Component\DependencyInjection\ContainerInterface;
15

16
class LoadPostData extends Fixture implements ContainerAwareInterface, DependentFixtureInterface
17
{
18
    const COUNT_POSTS = 50;
19

20
    /**
21
     * @var ContainerInterface
22
     */
23
    protected $container;
24

25
    /**
26
     * {@inheritdoc}
27
     */
28
    public function setContainer(ContainerInterface $container = null)
29
    {
30
        $this->container = $container;
31
    }
32

33
    /**
34
     * @param ObjectManager $manager
35
     */
36
    public function load(ObjectManagerInterface $manager)
37
    {
38
        /* @var TextProcessor $textProcessor */
39
        $textProcessor = $this->container->get('mtt_blog.text_processor');
40

41
        $post = new Post();
42
        $post->setTitle('Тестовая запись')
43
            ->setUrl(RuTransform::ruTransform('Тестовая запись'))
44
            ->setCategory($manager->merge($this->getReference('category-2')))
45
            ->setDescription('метатег description тестовй записи')
46
            ->setRawText('<p>Тестовая запись, собственно...</p>')
47
            ->addTag($manager->merge($this->getReference('tag-test')));
48
        $textProcessor->processing($post);
49
        $manager->persist($post);
50
        $manager->flush();
51

52
        $post->setCommentsCount(2);
53

54
        $this->addReference('post-1', $post);
55

56
        $post2 = new Post();
57
        $post2->setTitle('запись про PHP')
58
            ->setUrl(RuTransform::ruTransform('запись про PHP'))
59
            ->setCategory($manager->merge($this->getReference('category-4')))
60
            ->setDescription('метатег description тестовой записи про ПХП')
61
            ->setRawText('<p>PHP (рекурсивный акроним словосочетания PHP: Hypertext Preprocessor) - это распространенный язык программирования общего назначения с открытым исходным кодом. PHP сконструирован специально для ведения Web-разработок и его код может внедряться непосредственно в HTML.</p>')
62
            ->addTag($manager->merge($this->getReference('tag-php')));
63
        $textProcessor->processing($post2);
64
        $manager->persist($post2);
65
        $manager->flush();
66

67
        $this->addReference('post-2', $post2);
68

69
        $post3 = new Post();
70
        $post3->setTitle('ещё о PHP')
71
            ->setUrl(RuTransform::ruTransform('ещё о PHP'))
72
            ->setCategory($manager->merge($this->getReference('category-4')))
73
            ->setDescription('description PHP')
74
            ->setRawText('<p>Ещё одна запись о PHP</p>')
75
            ->addTag($manager->merge($this->getReference('tag-php')));
76
        $textProcessor->processing($post3);
77
        $manager->persist($post3);
78
        $manager->flush();
79

80
        $this->addReference('post-3', $post3);
81

82
        $file = $manager->merge($this->getReference('file-1'));
83

84
        $post4 = new Post();
85
        $post4->setTitle('JavaScript, хоть и jQuery')
86
            ->setUrl(RuTransform::ruTransform('JavaScript, хоть и jQuery'))
87
            ->setCategory($manager->merge($this->getReference('category-5')))
88
            ->setDescription('description-JavaScript')
89
            ->setRawText('<p>JavaScript - прототипно-ориентированный сценарный язык программирования. Является диалектом языка ECMAScript</p><p>!'
90
                . $file->getId() . '!</p><!-- cut --><p>Параграф под катом</p>')
91
            ->addTag($manager->merge($this->getReference('tag-javascript')));
92
        $textProcessor->processing($post4);
93
        $manager->persist($post4);
94
        $manager->flush();
95

96
        $this->addReference('post-4', $post4);
97

98
        $file->setPost($post4);
99
        $manager->flush();
100

101
        $faker = FakerFactory::create('ru_RU');
102
        $faker->seed(303975);
103

104
        for ($i = 0; $i < self::COUNT_POSTS; $i++) {
105
            $title = sprintf('%s %s %s', $faker->word, $faker->word, $faker->word);
106

107
            $post = new Post();
108
            $post
109
                ->setTitle($title)
110
                ->setUrl(RuTransform::ruTransform($title))
111
                ->setCategory($manager->merge($this->getReference('category-' . $faker->numberBetween(1, 9))))
112
                ->setDescription($title)
113
                ->setRawText($faker->text($faker->numberBetween(100, 300)))
114
            ;
115
            $textProcessor->processing($post);
116

117
            for ($j = 0; $j < $faker->numberBetween(0, 7); $j++) {
118
                $post->addTag(
119
                    $manager->merge(
120
                        $this->getReference('tag-' . $faker->numberBetween(1, LoadTagData::COUNT_TAGS - 1))
121
                    )
122
                );
123
            }
124

125
            $manager->persist($post);
126
            $manager->flush();
127

128
            $this->addReference('post-' . (5 + $i), $post);
129
        }
130
    }
131

132
    /**
133
     * @return array
134
     */
135
    public function getDependencies()
136
    {
137
        return [
138
            LoadCategoryData::class,
139
            LoadMediaFileData::class,
140
            LoadTagData::class,
141
        ];
142
    }
143
}
144

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.