jacodelucia
2/10/2015 - 8:36 AM

Sf2 : Doctrine

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);