L'erreur en question : Neither the property "Name" nor one of the methods "Name()", "getName()"/"isName()"/"hasName()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".
Entity :
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Musicien
*
* @ORM\Table(name="musicien")
* @ORM\Entity(repositoryClass="AppBundle\Repository\MusicienRepository")
*/
class Musicien
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="instrument", type="string", length=255)
*/
private $instrument;
/**
* @var string
*
* @ORM\Column(name="mail", type="string", length=255)
*/
private $mail;
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime")
*/
private $createdAt;
/**
* Musicien constructor.
*/
public function __construct()
{
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name.
*
* @param string $name
*
* @return Musicien
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set instrument.
*
* @param string $instrument
*
* @return Musicien
*/
public function setInstrument($instrument)
{
$this->instrument = $instrument;
return $this;
}
/**
* Get instrument.
*
* @return string
*/
public function getInstrument()
{
return $this->instrument;
}
/**
* Set mail.
*
* @param string $mail
*
* @return Musicien
*/
public function setMail($mail)
{
$this->mail = $mail;
return $this;
}
/**
* Get mail.
*
* @return string
*/
public function getMail()
{
return $this->mail;
}
/**
* Set createdAt.
*
* @param \DateTime $createdAt
*
* @return Musicien
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt.
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @ORM\ManyToOne(targetEntity="Instrument", inversedBy="musiciens")
* @ORM\JoinColumn(name="instrument_id", referencedColumnName="id")
*/
private $musicien;
}
Controller:
<?php
namespace AppBundle\Controller;
use AppBundle\Form\MusicienType;
use AppBundle\Entity\Musicien;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class MusicienController extends Controller
{
/**
* @Route("/musicien/view", name="musicienview")
*/
public function viewAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$musiciens = $em->getRepository('AppBundle:Musicien')->findAll();
$em = $this->getDoctrine()->getManager();
if ($musiciens == null) {
throw new NotFoundHttpException('erreur de récupération des données');
}
$response = $this->render('projet/musicienview.html.twig', [
'musiciens' => $musiciens
]);
return $response;
}
/**
* @Route("musicien/view/{id}", name="musicien_view_url")
*/
public function viewUrlAction($id) {
// récupérer un seul article depuis la base de données
$em = $this->getDoctrine()->getManager();
$musicien = $em->getRepository("AppBundle:Musicien")->find($id);
// générer une page d'erreur 404 si l'article n'existe pas
if ($musicien == null) {
// le code s'arrêtera ici si on rentre dans le if
throw new NotFoundHttpException("L'ID N'EXISTE PAS");
}
$response = $this->render('projet/musicienviewid.html.twig', [
'musicien' => $musicien
]);
return $response;
}
/**
* @Route("musicien/insert", name="musicien_insert")
*/
public function insertAction(Request $request) {
// 1- créer une instance de Article
$musicien = new Musicien();
$formBuilder = $this->get('form.factory')->createBuilder(MusicienType::class, $musicien);
/
$form = $formBuilder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($musicien);
$em->flush();
}
}
return $this->render('projet/musicieninsert.html.twig', [
'formMusicien' => $form->createView()
]);
}
}
Form :<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MusicienType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name',TextType::class)
->add('instrument',TextType::class)
->add('mail',EmailType::class)
->add('createdAt',DateType::class);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Musicien'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_musicien';
}
}
View : <html>
<head>
<meta charset="UTF-8" />
<title>{% block title %}projet perso{% endblock %}</title>
{% block stylesheets %}Ceci est la page de vue d'un musicien{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
{% block body %}Ajouter un Musicien{% endblock %}
{{ form_row(formMusicien.Name) }}
{{ form_row(formMusicien.Instrument) }}
{{ form_row(formMusicien.Mail) }}
<input type="submit" value="Enregistrer le musicien" />
{% block javascripts %}{% endblock %}
</body>
</html>