Ajouter un paramètre typé à l'action :
public function addAction(Request $request) {}
// On veut avoir l'URL de l'annonce d'id 5.
$url = $this->get('router')->generate(
'oc_platform_view', // 1er argument : le nom de la route
array('id' => 5) // 2e argument : les valeurs des paramètres
);
// Méthode courte
$url = $this->generateUrl('oc_platform_home');
<a href="{{ path('oc_platform_view', { 'id': advert_id }) }}">
Lien vers l'annonce d'id {{ advert_id }}
</a>
$session = $request->getSession();
$session->getFlashBag()->add('info', 'Annonce bien enregistrée');
{% for message in app.session.flashbag.get('info') %}
<p>Message flash : {{ message }}</p>
{% endfor %}
Lister les services :
php bin/console debug:container
Préciser la class dans netbean :
/* @var $fb \Symfony\Component\Form\FormBuilder */
$fb = $this->get('form.factory')->createBuilder(...);
$advert = new Advert();
$formBuilder = $this->get('form.factory')->createBuilder(FormType::class, $advert);
$formBuilder
->add('date', DateType::class)
->add('title', TextType::class)
->add('content', TextareaType::class)
->add('author', TextType::class)
->add('published', CheckboxType::class)
->add('save', SubmitType::class)
;
// À partir du formBuilder, on génère le formulaire
$form = $formBuilder->getForm();
return $this->render('OCPlatformBundle:Advert:add.html.twig', array( 'formobj' => $form->createView() ));
puis dans le twig {{ form(formobj) }}
$form->handleRequest($request);
if ($form->isValid()) {...
php bin/console doctrine:generate:entity
Dans l'entité propriétaire :
@ORM\ManyToOne(targetEntity="Advert",inversedBy="advertskills", cascade={"persist"}) //targetEntity = "OC\PlatformBundle\Entity\Advert
@ORM\JoinColumn(nullable=false)
Dans l'inverse:
@ORM\OneToMany(targetEntity="OC\PlatformBundle\Entity\Application", mappedBy="advert")
<?php
// src/OC/PlatformBundle/DataFixtures/ORM/LoadCategory.php
namespace OC\PlatformBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use OC\PlatformBundle\Entity\Category;
class LoadCategory implements FixtureInterface
{
// Dans l'argument de la méthode load, l'objet $manager est l'EntityManager
public function load(ObjectManager $manager)
{
// Liste des noms de catégorie à ajouter
$names = array(
'Développement web',
'Développement mobile',
'Graphisme',
'Intégration',
'Réseau'
);
foreach ($names as $name) {
// On crée la catégorie
$category = new Category();
$category->setName($name);
// On la persiste
$manager->persist($category);
}
// On déclenche l'enregistrement de toutes les catégories
$manager->flush();
}
}
php bin/console doctrine:fixtures:load
absence du tag doctrine.fixture.orm
nécessaire à la mise en place du service
Doc : https://symfony.com/doc/master/bundles/DoctrineFixturesBundle/index.html