Новый комментарий

ilyaOrlov 21.01.2019 в 23:45

После команды "doctrine:fixtures:load" вылезает ошибка:

Cannot autowire service "App\DataFixtures\AppFixtures": argument "$slugify"
   of method "__construct()" references class "Cocur\Slugify\Slugify" but no
  such service exists.

Несколько изменил конструктор, и записи в БД создались безо всяких ошибок:

public function __construct()
    {
        $this->faker = Factory::create();
        $this->slug = Slugify::create();
    }

Объясните, в чем причина такого поведения? Не получается разобраться(

lolychank 22.01.2019 в 00:03

Дело в том, что Slugify не является внутренним сервисом Symfony. Для таких случаев фреймворк требует объявлять сервисы в config/services.yaml. В следующей статье об этой ошибке написано и показано, как исправить.

vtolstov 16.10.2019 в 13:16

Сюда напишу, чтобы было повыше.
Для начала тем, кто хочет докопаться до истины:
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/basic-mapping.html#doctrine-mapping-types - типы данных согласно Doctrine
https://github.com/fzaninotto/Faker - особенно про форматы Faker`а
https://github.com/cocur/slugify - установка Slugify на Symfony 3 и 4

От себя кратко по уроку:
не забудьте прописать use Faker\Factory;
можно не писать use Cocur\Slugify\Slugify;

По установке Slugify добавляем в файле config/bundles.php

Cocur\Slugify\Bridge\Symfony\CocurSlugifyBundle::class => ['all' => true],

и в конструкторе пишем:

public function __construct(\Cocur\Slugify\SlugifyInterface $slugify)

Теперь для автора урока: Это ужасно! Моя упертость конечно поможет мне пройти весь этот курс, но подача материала отвратительная. Судя по первому уроку это все для новичков, так как местами расписано достаточно глубоко и понятно. Но! Если человек делает все с нуля и идет по этим урокам, то на данном этапе у него будет просто куча ошибок и он не поймет что с ними делать. Комменты тому подтверждение. Многие навтыкали свои костыли и решили, что раз работает значит ок. На самом деле решают их вопросы мануал самого Symfony и мануалы всех указанных пакетов. Но блин, зачем тогда этот урок? Если пишете для новичков, то пишите на чистом листе, с объяснением того что, куда и зачем. Либо выкладывайте исходники, чтобы разбираться самим! Я соглашусь, что обучающийся должен и сам работать над проектом, делать домашку, но тогда дайте ему рабочую базу и задание.

Kutkh 27.06.2020 в 11:43

нельзя плюсик поставить, согласен с каждым словом )

[email protected] 01.02.2022 в 22:10

если у кого будет join(): Argument #2 ($array) must be of type ?array, string given
8

в файле Lorem.php на 95 строке
return join($words, ' ') . '.';
заменить на
return join(' ', $words) . '.';
и все последующие , у вас будут еще 2 ошибки также , поменяйте местами аргументы

valera 31.03.2019 в 23:58

а у меня после команды "doctrine:fixtures:load" такая ошибка:

The autoloader expected class "App\DataFixtures\AppFixtures" to be defined   
  in file "/home/user/var/www/symfony-my-pro/vendor/composer/../../src/DataFi  
  xtures/AppFixtures.php". The file was found but the class was not in it, th  
  e class name or namespace probably has a typo. 
lolychank 01.04.2019 в 08:20

У вас опечатка или в неймспейсе, или в названии класса. И загружайте фикстуры с флагом -n, то есть

php bin/console doctrine:fixtures:load -n
valera 01.04.2019 в 23:02

не могу найти проблему, вроде всё как надо, опечаток нет, но пишет ошибку
The autoloader expected class "App\DataFixtures\AppFixtures" to be defined in file "/home/user/var/www/symfony-my-pro/vendor/composer/../../src/DataFi xtures/AppFixtures.php". The file was found but the class was not in it, th e class name or namespace probably has a typo.
и почему такой странный путь, зачем нам в папку vendor?

<?php

namespace App\DataFixtures;
namespace App\Entity;

use Cocur\Slugify\Slugify;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Faker\Factory;

class AppFixtures extends Fixture
{
    private $faker;
    private $slug;

    public function __construct()
    {
        $this->faker = Factory::create();
        $this->slug = Slugify::create();
    }

    public function load(ObjectManager $manager)
    {
        $this->loadPosts($manager);
    }

    public function loadPosts(ObjectManager $manager){
        for ($i = 1; $i < 20; $i++) {
            $post = new Post();
            $post->setTitle($this->faker->text(100));
            $post->setSlug($this->slug->slugify($post->getTitle()));
            $post->setBody($this->faker->text(1000));
            $post->setCreatedAt($this->faker->dateTime);

            $manager->persist($post);
        }

        $manager->flush();
    }
}
lolychank 01.04.2019 в 23:19

У вас два немспейса объявлены. Удалите App\Entity.

cyprusscorpion 14.04.2019 в 17:46

Настройка
App\DataFixtures\AppFixtures:
$slugify: 'Cocur\Slugify\Slugify'
в файле config/services.yaml
у меня лично не работает.
Пришлось импортировать Slugify,
убирать параметр из конструктора
и создавать объект с помощью метода create().
Вот так:
namespace App\DataFixtures;

use Cocur\Slugify\Slugify;
use App\Entity\Post;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Faker\Factory;

class AppFixtures extends Fixture
{
private $faker;
private $slug;

public function __construct()
{
    $this->faker = Factory::create();
    $this->slug = Slugify::create();
}

Только после этого Entity благополучно записалась в базу :))

lolychank 14.04.2019 в 17:52

Какая ошибка была?

cyprusscorpion 14.04.2019 в 18:08

PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Type error: Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of App\DataFixtures\Slugify, string given, called in /home/cyprusscorpion/PhpstormProjects/blog_symfony2/var/cache/dev/ContainerSofzcof/getDoctrine_FixturesLoadCommandService.php on line 22 in /home/cyprusscorpion/PhpstormProjects/blog_symfony2/src/DataFixtures/AppFixtures.php:17
Stack trace:

0 /home/cyprusscorpion/PhpstormProjects/blog_symfony2/var/cache/dev/ContainerSofzcof/getDoctrine_FixturesLoadCommandService.php(22): App\DataFixtures\AppFixtures->__construct('Cocur\Slugify\S...')

1 /home/cyprusscorpion/PhpstormProjects/blog_symfony2/var/cache/dev/ContainerSofzcof/srcDevDebugProjectContainer.php(961): require('/home/cyprussco...')

2 /home/cyprusscorpion/PhpstormProjects/blog_symfony2/var/cache/dev/ContainerSofzcof/getConsole_CommandLoaderService.php(68): ContainerSofzcof\srcDevDebugProjectContainer->load('getDoctrine_Fix...')

3 /home/cyprus in /home/cyprusscorpion/PhpstormProjects/blog_symfony2/src/DataFixtures/AppFixtures.php on line 17

lolychank 14.04.2019 в 18:12

Ну так он же показывает, почему ошибка - потому что скомпилированный контейнер из кэша не соответствует тому, что есть в реальности. Выполните php bin/console cache:clear. Правильно объявленный сервис в config/services.yaml не может не работать. А еще, можно не объявлять его как сервис, а заинжектить SlugifyInterface, тогда все будет работать и без сервиса.

cyprusscorpion 14.04.2019 в 18:47

Кэш очистил, ошибка та же. Не пойму, что компилятору не нравится. В файле getDoctrine_FixturesLoadCommandService.php, который в папке cache, в конструкторе при создании объекта указан параметр типа Сосur\Slugify\Slugify, только он обрамлен одинарными кавычками и обратные слэши экранированы:

new \App\DataFixtures\AppFixtures('Cocur\Slugify\Slugify')

cyprusscorpion 14.04.2019 в 18:49

new \App\DataFixtures\AppFixtures('Cocur\Slugify\Slugify')

cyprusscorpion 14.04.2019 в 18:50

\ не копируется здесь )

cyprusscorpion 14.04.2019 в 18:50

а в файле слэши двойные )

lolychank 14.04.2019 в 18:55

Вы не должны ничего смотреть в этих файлах, это кэш. Симфони знает, как с ними работать. Заинжектите в конструктор SlugifyInterface вместо Slugify.

cyprusscorpion 14.04.2019 в 18:59

Если вот так:

    public function __construct(SlugifyInterface $slugify)
    {
        $this->faker = Factory::create();
        $this->slug = $slugify;
    }

то делал, ошибка та же )

cyprusscorpion 14.04.2019 в 19:01

PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Type error: Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of Cocur\Slugify\SlugifyInterface, string given, called in /home/cyprusscorpion/PhpstormProjects/blog_symfony2/var/cache/dev/ContainerSofzcof/getDoctrine_FixturesLoadCommandService.php on line 22 in /home/cyprusscorpion/PhpstormProjects/blog_symfony2/src/DataFixtures/AppFixtures.php:18

cyprusscorpion 15.04.2019 в 10:27

Что только ни делал, конструктор с параметром Slugify $slugify не работает, только так:

    public function __construct()
    {
        $this->faker = Factory::create();
        $this->slug = Slugify::create();
    }
webdev177 21.06.2019 в 17:06

Все просто решается - надо для вендорной этой либы прописать autowire в services.yaml.

Вот так:

Cocur\Slugify\Slugify:
    autowire: true

Вот тут можно посмотреть Symfony4 use external class library as a service

Serge 07.08.2019 в 12:26

У меня ругалось на базу данных

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'symfony4.post' doesn't exist

пока не добавил в phpMyAdmin таблицу post вручную

Serge 07.08.2019 в 12:29

Еще у меня была вот такая ошибка:

Attempted to load class "Post" from namespace "App\DataFixtures".  
Did you forget a "use" statement for "App\Entity\Post"? 

В файле src/DataFixtures/AppFixtures.php я добавил:

use App\Entity\Post;

Возникали также проблемы с Slugify. В итоге сработало вот так:

<?php

namespace App\DataFixtures;

use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Cocur\Slugify\Slugify;
use Faker\Factory;
use App\Entity\Post;

class AppFixtures extends Fixture
{
    private $faker;

    private $slug;

    public function __construct(Slugify $slugify)
    {
        $this->faker = Factory::create();
        $this->slug = $slugify;
    }

    public function load(ObjectManager $manager)
    {
        $this->loadPosts($manager);
    }

    public function loadPosts(ObjectManager $manager)
    {

        for ($i = 1; $i < 20; $i++) {
            $post = new Post();
            $post->setTitle($this->faker->text(100));
            $post->setSlug($this->slug->slugify($post->getTitle()));
            $post->setBody($this->faker->text(1000));
            $post->setCreatedAt($this->faker->dateTime);

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

}

И еще я перед этим пробовал менять config/services.yaml и там остался код:

    Cocur\Slugify\Slugify:
        autowire: true

Не знаю, может ли это иметь значение ))

Iliusha99 17.08.2019 в 10:09

У меня было такая проблема http://prntscr.com/otssge, параметрам в конструктор был передан путь до класса Slugify и он был определен как string, а в конструкторе тайпхинтинг хочет объект а не строка
в сервисе FixturesLoad я вызвал метод create чтобы был передан объект http://prntscr.com/otstk9 , не знаю ли правильно, я только начинаю изучать фреймворк, или проста нужно было вызывать метод create() в сам конструктор и убрать тайпхинтинг.

Iliusha99 17.08.2019 в 10:30

Там явно конструктор ждет объект, или он сам его создает?

Iliusha99 17.08.2019 в 11:16

решил добавив в service:
Cocur\Slugify\Slugify:
autowire: true
Там оказывается жестка формат кода надо соблюдать, а я писал без всяких отступах

polvanovv 01.09.2019 в 15:08
D:\OpenServer\OSPanel\domains\blog>php bin/console doctrine:fixtures:load

 Careful, database "blog_db" will be purged. Do you want to continue? (yes/no) [no]:
 > y

   > purging database
   > loading App\DataFixtures\AppFixtures

D:\OpenServer\OSPanel\domains\blog>

Но записи в БД не появляются в чем может быть проблема?

Androbim 11.09.2019 в 19:39

То же самое. Ошибок нет, но нет и записей в таблице.

Androbim 11.09.2019 в 19:47

Прошу прощения, невнимательность. Не надо отвечать :)

Metey 24.09.2019 в 16:42

вот такая ошибка, прбовал что пишут в комментах и чего то никак

 php bin/console doctrine:fixtures:load 
PHP Fatal error:  Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of App\DataFixtures\Slugify, string given, called in /home/dmitry/www/test.project/var/cache/dev/ContainerCxf1txa/getDoctrine_FixturesLoadCommandService.php on line 23 in /home/dmitry/www/test.project/src/DataFixtures/AppFixtures.php:16
Stack trace:
#0 /home/dmitry/www/test.project/var/cache/dev/ContainerCxf1txa/getDoctrine_FixturesLoadCommandService.php(23): App\DataFixtures\AppFixtures->__construct('Cocur\\Slugify\\S...')
#1 /home/dmitry/www/test.project/var/cache/dev/ContainerCxf1txa/srcApp_KernelDevDebugContainer.php(420): require('/home/dmitry/ww...')
#2 /home/dmitry/www/test.project/vendor/symfony/dependency-injection/Container.php(433): ContainerCxf1txa\srcApp_KernelDevDebugContainer->load('getDoctrine_Fix...')
#3 /home/dmitry/www/test.project/vendor/symfony/dependency-injection/Argument/ServiceLocator.php(40): Symfony\Component\DependencyInjection\Contain in /home/dmitry/www/test.project/src/DataFixtures/AppFixtures.php on line 16
vtolstov 16.10.2019 в 08:13

А это нормально, что я создал базу в кодировке utf8_general_ci, а Doctrine пишет туда таблицы в utf8mb4_unicode_ci?

Разобрался. Для тех кто в танке как я: utf8_general_ci является устаревшей кодировкой. Лучше использовать utf8mb4_general_ci, но это может вызвать проблемы с сортировкой. Так что всю базу лучше сразу делать в utf8mb4_unicode_ci.

rweb 09.11.2019 в 21:52

Почему геттер позволяет возвращать null?
public function getId(): ?int
{
return $this->id;
}

teroni 07.01.2020 в 00:03

знак '?' перед int значит либо целое число вернуть либо null

[email protected] 27.01.2020 в 11:09

Автор наверное зря начал с курса symfony. Это фреймворк не для новичков, я бы вам посоветовал для начала Laravel посмотреть, там порог вхождения полегче. И в принципе основы MVC в пред.курсе именно больше для него подходят, хотя и с орехами, т.к. Он вынес логику некоторую в контроллеры, хотя этим должны заниматься репозитории

Kutkh 27.06.2020 в 11:36

очень много ошибок тексте и нет полного исходника, чтобы понять, где косяк

Поскольку мы работаем с постами, создадим приватный метод loadPosts, который вызовем в методе load


public function loadPosts(ObjectManager $manager)

что не так? )))

не видно пространство имен, вылезла такая ошибка
> symfony console doctrine:fixtires:load

In DefinitionErrorExceptionPass.php line 54:

  Cannot autowire service "App\DataFixtures\AppFixtures": argument "$slugify" of method "__construct()" references class "Cocur\Slugify\Slugify" but no such service exists.  

exit status 1

а после создания AppFixture phpstorm ругается

symfony console doctrine:fixtires:load

In DefinitionErrorExceptionPass.php line 54:

  Cannot autowire service "App\DataFixtures\AppFixtures": argument "$slugify" of method "__construct()" references class "Cocur\Slugify\Slugify" but no such service exists.  

exit status 1
[тыц](https://php.zone/uploads/img/20200627c2c106625c5ffdeb510fc00ac5390aecfc2bdcfad06113f4459796757b8ed3ab.png)

будет создано 19 записей базы, а не 20!!
!
нельзя было нормальный визуальный редактор прикрутить?
[email protected] 27.07.2020 в 14:32

Symfony 4.4.10
Нифига не работает!!!!
Ошибка:

[critical] Uncaught Error: Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of Cocur\Slugify\Slugify, string given, called in ...

и в config/services.yaml прописал то, что здесь советовали.
и изменял public function __construct(), так как здесь написано.
и в файл config/bundles.php добавил, то что здесь писали.
Нифига не работает!!! Одна и та же ошибка!!!!

Viktor 01.09.2020 в 16:46

Подскажите пожалуйста, что делать с
Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of Cocur\Slugify\Slugify, string given, called in C:\OpenServer\domains\blog\var\cache\dev\ContainerCRTSZ74\getDoctrine_FixturesLoadCommandService.php on line 34
в config/services.yaml прописал со след урока, но ошибка все равно появляется

telebob 24.10.2020 в 07:58

Всем привет!
У меня после вот такой команды:
php bin/console doctrine:fixtures:load

Вылезает вот такая бяка:
In AbstractMySQLDriver.php line 112:

An exception occurred in driver: SQLSTATE[HY000] [2002] ??????????? ?? ???????????, ?.?. ???????? ????????? ?????? ?????? ?? ???????????.

In Exception.php line 18:

SQLSTATE[HY000] [2002] ??????????? ?? ???????????, ?.?. ???????? ????????? ?????? ?????? ?? ???????????.

In PDOConnection.php line 38:

SQLSTATE[HY000] [2002] ??????????? ?? ???????????, ?.?. ???????? ????????? ?????? ?????? ?? ???????????.

doctrine:fixtures:load [--append] [--group GROUP] [--em EM] [--shard SHARD] [--purge-with-truncate] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>

Подскажите, плиз, в чем дело, и что делать!

telebob 24.10.2020 в 08:09

Извините!
Сам затупил. Не запустил Сервер БД.

[email protected] 13.11.2020 в 06:12
###```
###- - > > пишите здесь ваш код
steamvis 17.01.2021 в 15:06

у кого ошибка при импорте фикстур на php 8
пакет faker не поддерживается и нужно использовать его форк composer require fakerphp/faker

Drumsid 28.12.2021 в 18:25

Пробовал повторить на symfony 6, и тоже на php 8, но cocur/slugify ругается в фикстурах. Посмотрел в доке, он вроде теперь через интерфейс реализовывается. Но у меня не вышло это сделать. Запили через SluggerInterface

use Symfony\Component\String\Slugger\SluggerInterface;

    public function __construct(SluggerInterface $slugger)
    {
        $this->faker = Factory::create();
        $this->slugger = $slugger;
    }

а потом естественно прочитал что 8 php не будет работать))

kan22 04.03.2022 в 17:09

У всех у кого вылазит ошибка:

Uncaught Error: Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of Cocur\Slugify\Slugify, string given, called in /var/www/myblog.local/var/cache/dev/ContainerP7gMFKr/getDoctrine_FixturesLoadCommandService.php on line 36

в файл config/bundles.php добавьте:

return [
    // ...
    Cocur\Slugify\Bridge\Symfony\CocurSlugifyBundle::class => ['all' => true],
];

и вместо Slugify используйте SlugifyInterface

da4nick 24.06.2022 в 13:28

Предлагаемый план битвы:

  1. создаём entity (поля лучше указывать сразу, в консоли, т.к. синтаксис аннотаций другой)
  2. готовим и делаем миграцию
  3. вводим пару строк в БД руками и делаем вывод в браузере (код берём из след.урока)

  4. а вот теперь боремся с доп. пакетами
Логические задачи с собеседований