Добавление новой формы и сущностей в Symfony не работает - PullRequest
0 голосов
/ 21 апреля 2019

Я разбудил проект Symfony 3 и пытаюсь добавить новый объект и соответствующий тип формы, но не могу заставить его работать. Я пробовал с генератором и вручную, оба не будут работать. Решение с генератором будет лучшим вариантом

Я сгенерировал свою сущность School с помощью доктрины php bin / console: generate: entity, но когда я пытаюсь сгенерировать форму, я получаю сообщение об ошибке Class GreenBundle\Entity\School does not exist.

Затем я попытался создать форму вручную и получил: Expected to find class "GreenBundle\Form\SchoolType" in file "/var/www/symfony/src/GreenBundle/Form/SchoolType.php" while importing services from resource "../../src/GreenBundle/*", but it was not found! Check the namespace prefix used with the resource.

Моя школьная сущность, сгенерированная из командной строки, проста

<?php

namespace GreenBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * School
 *
 * @ORM\Table(name="school")
 * @ORM\Entity(repositoryClass="GreenBundle\Repository\SchoolRepository")
 */
class School
{
     /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255)
     */
    private $nom;

    (... Some other variables, the getters and setters )
}

SchoolType, который я добавил:

<?php

namespace GreenBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\OptionsResolver\OptionsResolver;

class SchoolType extends AbstractType
{
    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'GreenBundle\Entity\School',
        ));
    }
    /**
     * @return string
     */
    public function getName()
    {
        return 'green_mainbundle_school';
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('nom', TextType::class, array(
            'label' => "Nom de l'école",
            'required' => false,
            'attr' => array(
                'class' => 'form-control',
                'placeholder' => 'ex: École Saint-Exupéry')
        ));
    }

}

И блок In services.yml, на который ссылается код ошибки:

# this creates a service per class whose id is the fully-qualified class name
    GreenBundle\:
        resource: '../../src/GreenBundle/*'
        # you can exclude directories or files
        # but if a service is unused, it's removed anyway
        exclude: '../../src/GreenBundle/{Entity,Repository,Tests}'

Знаете ли вы, что я делаю неправильно, чтобы заставить сервер работать с новым SchoolType и иметь возможность использовать его в контроллере?

Спасибо

======== Редактировать

У меня есть Symfony 3

php bin/console --version
Symfony 3.4.14 (kernel: app, env: dev, debug: true)

Архитектура проекта классическая, я думаю, у меня есть папки по умолчанию Symfony В папке src у меня есть:

  • AppBundle (не используется)
  • GreenBundle
    • Контроллер
    • DataFixtures
    • DBAL
    • * 1040 внедрение зависимости *
    • Entity
    • Форма
    • Репозиторий (Пусто, я не думаю, что они создали сущности с генератором)
    • Услуги
    • Тесты
    • Twig
    • GreenBundle.php

======== Редактировать 2

Пространство имен, которое я использую в GreenBundle.php: GreenBundle, вы можете увидеть файл ниже

namespace GreenBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class GreenBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

1 Ответ

0 голосов
/ 24 апреля 2019

В случае, если у кого-то возникла такая же проблема, я запускал свой проект в контейнере Docker, и это была проблема синхронизации.Сами файлы Symfony верны.Docker обнаружил, что новый файл был добавлен, но не установил содержимое должным образом.Перестройка и / или изменение способа использования докера с этим приложением устраняет проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...