|
11 | 11 |
|
12 | 12 | namespace App\DataFixtures;
|
13 | 13 |
|
14 |
| -/** |
15 |
| - * Helper class to create fixtures contents. |
16 |
| - */ |
17 |
| -trait FixturesTrait |
| 14 | +use App\Entity\Comment; |
| 15 | +use App\Entity\Post; |
| 16 | +use App\Entity\Tag; |
| 17 | +use App\Entity\User; |
| 18 | +use App\Utils\Slugger; |
| 19 | +use Doctrine\Bundle\FixturesBundle\Fixture; |
| 20 | +use Doctrine\Common\Persistence\ObjectManager; |
| 21 | +use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; |
| 22 | + |
| 23 | +class AppFixtures extends Fixture |
18 | 24 | {
|
19 |
| - private function getPostContent(): string |
| 25 | + private $passwordEncoder; |
| 26 | + |
| 27 | + public function __construct(UserPasswordEncoderInterface $passwordEncoder) |
20 | 28 | {
|
21 |
| - return <<<'MARKDOWN' |
22 |
| -Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor |
23 |
| -incididunt ut labore et **dolore magna aliqua**: Duis aute irure dolor in |
24 |
| -reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. |
25 |
| -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia |
26 |
| -deserunt mollit anim id est laborum. |
| 29 | + $this->passwordEncoder = $passwordEncoder; |
| 30 | + } |
27 | 31 |
|
28 |
| - * Ut enim ad minim veniam |
29 |
| - * Quis nostrud exercitation *ullamco laboris* |
30 |
| - * Nisi ut aliquip ex ea commodo consequat |
| 32 | + public function load(ObjectManager $manager) |
| 33 | + { |
| 34 | + $this->loadUsers($manager); |
| 35 | + $this->loadTags($manager); |
| 36 | + $this->loadPosts($manager); |
| 37 | + } |
31 | 38 |
|
32 |
| -Praesent id fermentum lorem. Ut est lorem, fringilla at accumsan nec, euismod at |
33 |
| -nunc. Aenean mattis sollicitudin mattis. Nullam pulvinar vestibulum bibendum. |
34 |
| -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos |
35 |
| -himenaeos. Fusce nulla purus, gravida ac interdum ut, blandit eget ex. Duis a |
36 |
| -luctus dolor. |
| 39 | + private function loadUsers(ObjectManager $manager) |
| 40 | + { |
| 41 | + foreach ($this->getUserData() as [$fullname, $username, $password, $email, $roles]) { |
| 42 | + $user = new User(); |
| 43 | + $user->setFullName($fullname); |
| 44 | + $user->setUsername($username); |
| 45 | + $user->setPassword($this->passwordEncoder->encodePassword($user, $password)); |
| 46 | + $user->setEmail($email); |
| 47 | + $user->setRoles($roles); |
| 48 | + |
| 49 | + $manager->persist($user); |
| 50 | + $this->addReference($username, $user); |
| 51 | + } |
37 | 52 |
|
38 |
| -Integer auctor massa maximus nulla scelerisque accumsan. *Aliquam ac malesuada* |
39 |
| -ex. Pellentesque tortor magna, vulputate eu vulputate ut, venenatis ac lectus. |
40 |
| -Praesent ut lacinia sem. Mauris a lectus eget felis mollis feugiat. Quisque |
41 |
| -efficitur, mi ut semper pulvinar, urna urna blandit massa, eget tincidunt augue |
42 |
| -nulla vitae est. |
| 53 | + $manager->flush(); |
| 54 | + } |
43 | 55 |
|
44 |
| -Ut posuere aliquet tincidunt. Aliquam erat volutpat. **Class aptent taciti** |
45 |
| -sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi |
46 |
| -arcu orci, gravida eget aliquam eu, suscipit et ante. Morbi vulputate metus vel |
47 |
| -ipsum finibus, ut dapibus massa feugiat. Vestibulum vel lobortis libero. Sed |
48 |
| -tincidunt tellus et viverra scelerisque. Pellentesque tincidunt cursus felis. |
49 |
| -Sed in egestas erat. |
| 56 | + private function loadTags(ObjectManager $manager) |
| 57 | + { |
| 58 | + foreach ($this->getTagData() as $index => $name) { |
| 59 | + $tag = new Tag(); |
| 60 | + $tag->setName($name); |
50 | 61 |
|
51 |
| -Aliquam pulvinar interdum massa, vel ullamcorper ante consectetur eu. Vestibulum |
52 |
| -lacinia ac enim vel placerat. Integer pulvinar magna nec dui malesuada, nec |
53 |
| -congue nisl dictum. Donec mollis nisl tortor, at congue erat consequat a. Nam |
54 |
| -tempus elit porta, blandit elit vel, viverra lorem. Sed sit amet tellus |
55 |
| -tincidunt, faucibus nisl in, aliquet libero. |
56 |
| -MARKDOWN; |
| 62 | + $manager->persist($tag); |
| 63 | + $this->addReference('tag-'.$name, $tag); |
| 64 | + } |
| 65 | + |
| 66 | + $manager->flush(); |
| 67 | + } |
| 68 | + |
| 69 | + private function loadPosts(ObjectManager $manager) |
| 70 | + { |
| 71 | + foreach ($this->getPostData() as [$title, $slug, $summary, $content, $publishedAt, $author, $tags]) { |
| 72 | + $post = new Post(); |
| 73 | + $post->setTitle($title); |
| 74 | + $post->setSlug($slug); |
| 75 | + $post->setSummary($summary); |
| 76 | + $post->setContent($content); |
| 77 | + $post->setPublishedAt($publishedAt); |
| 78 | + $post->setAuthor($author); |
| 79 | + $post->addTag(...$tags); |
| 80 | + |
| 81 | + foreach (range(1, 5) as $i) { |
| 82 | + $comment = new Comment(); |
| 83 | + $comment->setAuthor($this->getReference('john_user')); |
| 84 | + $comment->setContent($this->getRandomText(random_int(255, 512))); |
| 85 | + $comment->setPublishedAt(new \DateTime('now + '.($i).'seconds')); |
| 86 | + |
| 87 | + $post->addComment($comment); |
| 88 | + } |
| 89 | + |
| 90 | + $manager->persist($post); |
| 91 | + } |
| 92 | + |
| 93 | + $manager->flush(); |
| 94 | + } |
| 95 | + |
| 96 | + private function getUserData(): array |
| 97 | + { |
| 98 | + return [ |
| 99 | + // $userData = [$fullname, $username, $password, $email, $roles]; |
| 100 | + [ 'Jane Doe', 'jane_admin', 'kitten', '[email protected]', [ 'ROLE_ADMIN']], |
| 101 | + [ 'Tom Doe', 'tom_admin', 'kitten', '[email protected]', [ 'ROLE_ADMIN']], |
| 102 | + [ 'John Doe', 'john_user', 'kitten', '[email protected]', [ 'ROLE_USER']], |
| 103 | + ]; |
| 104 | + } |
| 105 | + |
| 106 | + private function getTagData(): array |
| 107 | + { |
| 108 | + return [ |
| 109 | + 'lorem', |
| 110 | + 'ipsum', |
| 111 | + 'consectetur', |
| 112 | + 'adipiscing', |
| 113 | + 'incididunt', |
| 114 | + 'labore', |
| 115 | + 'voluptate', |
| 116 | + 'dolore', |
| 117 | + 'pariatur', |
| 118 | + ]; |
| 119 | + } |
| 120 | + |
| 121 | + private function getPostData() |
| 122 | + { |
| 123 | + $posts = []; |
| 124 | + foreach ($this->getPhrases() as $i => $title) { |
| 125 | + // $postData = [$title, $slug, $summary, $content, $publishedAt, $author, $tags, $comments]; |
| 126 | + $posts[] = [ |
| 127 | + $title, |
| 128 | + Slugger::slugify($title), |
| 129 | + $this->getRandomText(), |
| 130 | + $this->getPostContent(), |
| 131 | + new \DateTime('now - '.$i.'days'), |
| 132 | + // Ensure that the first post is written by Jane Doe to simplify tests |
| 133 | + $this->getReference(['jane_admin', 'tom_admin'][0 === $i ? 0 : random_int(0, 1)]), |
| 134 | + $this->getRandomTags(), |
| 135 | + ]; |
| 136 | + } |
| 137 | + |
| 138 | + return $posts; |
57 | 139 | }
|
58 | 140 |
|
59 | 141 | private function getPhrases(): array
|
@@ -92,55 +174,64 @@ private function getPhrases(): array
|
92 | 174 | ];
|
93 | 175 | }
|
94 | 176 |
|
95 |
| - private function getTagNames(): array |
96 |
| - { |
97 |
| - return [ |
98 |
| - 'lorem', |
99 |
| - 'ipsum', |
100 |
| - 'consectetur', |
101 |
| - 'adipiscing', |
102 |
| - 'incididunt', |
103 |
| - 'labore', |
104 |
| - 'voluptate', |
105 |
| - 'dolore', |
106 |
| - 'pariatur', |
107 |
| - ]; |
108 |
| - } |
109 |
| - |
110 |
| - private function getRandomPostTitles(): array |
| 177 | + private function getRandomText(int $maxLength = 255): string |
111 | 178 | {
|
112 | 179 | $phrases = $this->getPhrases();
|
113 |
| - |
114 |
| - // this ensures that the first title is always 'Lorem Ipsum...' |
115 |
| - $loremIpsumPhrase = array_shift($phrases); |
116 | 180 | shuffle($phrases);
|
117 |
| - array_unshift($phrases, $loremIpsumPhrase); |
118 | 181 |
|
119 |
| - return $phrases; |
| 182 | + while (mb_strlen($text = implode('. ', $phrases).'.') > $maxLength) { |
| 183 | + array_pop($phrases); |
| 184 | + } |
| 185 | + |
| 186 | + return $text; |
120 | 187 | }
|
121 | 188 |
|
122 |
| - private function getRandomPostSummary(int $maxLength = 255): string |
| 189 | + private function getPostContent(): string |
123 | 190 | {
|
124 |
| - $phrases = $this->getPhrases(); |
| 191 | + return <<<'MARKDOWN' |
| 192 | +Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor |
| 193 | +incididunt ut labore et **dolore magna aliqua**: Duis aute irure dolor in |
| 194 | +reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. |
| 195 | +Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia |
| 196 | +deserunt mollit anim id est laborum. |
125 | 197 |
|
126 |
| - $numPhrases = random_int(6, 12); |
127 |
| - shuffle($phrases); |
128 |
| - $phrases = array_slice($phrases, 0, $numPhrases - 1); |
| 198 | + * Ut enim ad minim veniam |
| 199 | + * Quis nostrud exercitation *ullamco laboris* |
| 200 | + * Nisi ut aliquip ex ea commodo consequat |
129 | 201 |
|
130 |
| - while (mb_strlen($summary = implode('. ', $phrases).'.') > $maxLength) { |
131 |
| - array_pop($phrases); |
132 |
| - } |
| 202 | +Praesent id fermentum lorem. Ut est lorem, fringilla at accumsan nec, euismod at |
| 203 | +nunc. Aenean mattis sollicitudin mattis. Nullam pulvinar vestibulum bibendum. |
| 204 | +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos |
| 205 | +himenaeos. Fusce nulla purus, gravida ac interdum ut, blandit eget ex. Duis a |
| 206 | +luctus dolor. |
| 207 | +
|
| 208 | +Integer auctor massa maximus nulla scelerisque accumsan. *Aliquam ac malesuada* |
| 209 | +ex. Pellentesque tortor magna, vulputate eu vulputate ut, venenatis ac lectus. |
| 210 | +Praesent ut lacinia sem. Mauris a lectus eget felis mollis feugiat. Quisque |
| 211 | +efficitur, mi ut semper pulvinar, urna urna blandit massa, eget tincidunt augue |
| 212 | +nulla vitae est. |
133 | 213 |
|
134 |
| - return $summary; |
| 214 | +Ut posuere aliquet tincidunt. Aliquam erat volutpat. **Class aptent taciti** |
| 215 | +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi |
| 216 | +arcu orci, gravida eget aliquam eu, suscipit et ante. Morbi vulputate metus vel |
| 217 | +ipsum finibus, ut dapibus massa feugiat. Vestibulum vel lobortis libero. Sed |
| 218 | +tincidunt tellus et viverra scelerisque. Pellentesque tincidunt cursus felis. |
| 219 | +Sed in egestas erat. |
| 220 | +
|
| 221 | +Aliquam pulvinar interdum massa, vel ullamcorper ante consectetur eu. Vestibulum |
| 222 | +lacinia ac enim vel placerat. Integer pulvinar magna nec dui malesuada, nec |
| 223 | +congue nisl dictum. Donec mollis nisl tortor, at congue erat consequat a. Nam |
| 224 | +tempus elit porta, blandit elit vel, viverra lorem. Sed sit amet tellus |
| 225 | +tincidunt, faucibus nisl in, aliquet libero. |
| 226 | +MARKDOWN; |
135 | 227 | }
|
136 | 228 |
|
137 |
| - private function getRandomCommentContent(): string |
| 229 | + private function getRandomTags(): array |
138 | 230 | {
|
139 |
| - $phrases = $this->getPhrases(); |
140 |
| - |
141 |
| - $numPhrases = random_int(2, 15); |
142 |
| - shuffle($phrases); |
| 231 | + $tagNames = $this->getTagData(); |
| 232 | + shuffle($tagNames); |
| 233 | + $selectedTags = array_slice($tagNames, 0, random_int(2, 4)); |
143 | 234 |
|
144 |
| - return implode(' ', array_slice($phrases, 0, $numPhrases - 1)); |
| 235 | + return array_map(function ($tagName) { return $this->getReference('tag-'.$tagName); }, $selectedTags); |
145 | 236 | }
|
146 | 237 | }
|
0 commit comments