Sf2 : Doctrine
<?php
// CRÉER LA BASE DE DONNÉES
// > php app/console doctrine:database:create
// GÉBÉRER UNE ENTITÉ
// > php app/console doctrine:generate:entity --entity="AcmeStoreBundle:Product" --fields="name:string(255) price:float description:text"
// GÉBÉRER LES GETTERS ET SETTERS
// > php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product
// METTRE À JOUR LA BASE DE DONNÉES
// > php app/console doctrine:schema:update --force
<?php
namespace Acme\StoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Acme\StoreBundle\Entity\Product;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{
protected function get_db(){
return $this->getDoctrine()->getRepository('AcmeStoreBundle:Product');
}
public function indexAction()
{
return $this->render('AcmeStoreBundle:Default:index.html.twig');
}
/************************************************************************************************/
/* LISTE */
/************************************************************************************************/
public function allAction(){
$produits = $this->getDoctrine()
->getRepository('AcmeStoreBundle:Product')
->findAll();
return $this->render('AcmeStoreBundle:Default:produits.html.twig', ['produits' => $produits]);
}
/************************************************************************************************/
/* CREATE */
/************************************************************************************************/
public function createAction(){
$product = new Product();
$product->setName('Mon premier produit');
$product->setPrice('23.99');
$product->setDescription('La description du produit pour le vendre...');
$em = $this->getDoctrine()->getManager();
$em->persist($product);
$em->flush();
return new Response('Id du produit inséré : ' . $product->getId());
}
/************************************************************************************************/
/* UPDATE */
/************************************************************************************************/
public function updateAction($id){
$em = $this->getDoctrine()->getManager();
$product = $em->getRepository('AcmeStoreBundle:Product')->find($id);
if (!$product) {
throw $this->createNotFoundException(
'Aucun produit trouvé pour cet id : '.$id
);
}
$product->setName('Nom du nouveau produit!');
$em->flush();
return $this->redirect($this->generateUrl('acme_store_all'));
}
/************************************************************************************************/
/* DELETE */
/************************************************************************************************/
public function deleteAction($id){
$em = $this->getDoctrine()->getManager();
$product = $em->getRepository('AcmeStoreBundle:Product')->find($id);
if (!$product) {
throw $this->createNotFoundException(
'Aucun produit trouvé pour cet id : '.$id
);
}
$em->remove($product);
$em->flush();
return $this->redirect($this->generateUrl('acme_store_all'));
}
}
// RÉCUPÉRER LE REPOSITORY
$product = $this->getDoctrine()->getRepository('AcmeStoreBundle:Product')
// METHODES
// requête par clé primaire (souvent "id")
$product = $repository->find($id);
// Noms de méthodes dynamiques en se basant sur un nom de colonne
$product = $repository->findOneById($id);
$product = $repository->findOneByName('foo');
// trouver *tous* les produits
$products = $repository->findAll();
// trouver un groupe de produits en se basant sur une valeur de colonne
$products = $repository->findByPrice(19.99);