Я разбудил проект 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';
}
}