<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
		<id>http://wikiserver.infomerce.es/index.php?action=history&amp;feed=atom&amp;title=Els_bundles_a_symfony_2.</id>
		<title>Els bundles a symfony 2. - Historial de revisió</title>
		<link rel="self" type="application/atom+xml" href="http://wikiserver.infomerce.es/index.php?action=history&amp;feed=atom&amp;title=Els_bundles_a_symfony_2."/>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Els_bundles_a_symfony_2.&amp;action=history"/>
		<updated>2026-05-09T14:30:30Z</updated>
		<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Els_bundles_a_symfony_2.&amp;diff=5898&amp;oldid=prev</id>
		<title>Asalinas: Els bundles a symfony2 Els bundles a symfony 2. s'ha reanomenat com Els bundles a symfony 2.</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Els_bundles_a_symfony_2.&amp;diff=5898&amp;oldid=prev"/>
				<updated>2016-02-19T00:14:14Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php/Els_bundles_a_symfony2_Els_bundles_a_symfony_2.&quot; class=&quot;mw-redirect&quot; title=&quot;Els bundles a symfony2 Els bundles a symfony 2.&quot;&gt;Els bundles a symfony2 Els bundles a symfony 2.&lt;/a&gt; s&amp;#039;ha reanomenat com &lt;a href=&quot;/index.php/Els_bundles_a_symfony_2.&quot; title=&quot;Els bundles a symfony 2.&quot;&gt;Els bundles a symfony 2.&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style='vertical-align: top;' lang='ca'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Versió més antiga&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revisió del 00:14, 19 feb 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;' lang='ca'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Cap diferència)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Asalinas</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Els_bundles_a_symfony_2.&amp;diff=5897&amp;oldid=prev</id>
		<title>Asalinas: Es crea la pàgina amb «Un bundle és un concepte similar al dels plugins en altres aplicacions, però encara millor. La diferència clau és que '''en Symfony2 tot és un bundle''', incloent ta…».</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Els_bundles_a_symfony_2.&amp;diff=5897&amp;oldid=prev"/>
				<updated>2016-02-19T00:13:28Z</updated>
		
		<summary type="html">&lt;p&gt;Es crea la pàgina amb «Un bundle és un concepte similar al dels plugins en altres aplicacions, però encara millor. La diferència clau és que &amp;#039;&amp;#039;&amp;#039;en Symfony2 tot és un bundle&amp;#039;&amp;#039;&amp;#039;, incloent ta…».&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Un bundle és un concepte similar al dels plugins en altres aplicacions, però encara millor. La diferència clau és que '''en Symfony2 tot és un bundle''', incloent tant la funcionalitat bàsica de la plataforma com el codi escrit per a la teva aplicació.&lt;br /&gt;
&lt;br /&gt;
Els''' bundles són la part més important de Symfony2'''. Permeten utilitzar funcionalitats construïdes per tercers o empaquetar les teves pròpies funcionalitats per distribuir-les i reutilitzar-les en altres projectes. A més, faciliten molt l'activació o desactivació de determinades característiques dins d'una aplicació.&lt;br /&gt;
&lt;br /&gt;
Un '''bundle''' simplement '''és un conjunt estructurat d'arxius que es troben en un directori i que implementen una sola característica'''. Pots crear per exemple un BlogBundle, un ForoBundle o un bundle per gestionar usuaris (molts d'ells ja existeixen com bundles de programari lliure). Cada directori conté tot el relacionat amb aquesta característica, incloent arxius PHP, plantilles, fulles d'estil, arxius Javascript, tests i qualsevol altra cosa necessària.&lt;br /&gt;
&lt;br /&gt;
Les aplicacions Symfony es componen de bundles, tal com es defineix en el mètode '''registerBundles()''' de la classe '''AppKernel''':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// app/AppKernel.php&lt;br /&gt;
public function registerBundles()&lt;br /&gt;
{&lt;br /&gt;
    $bundles = array(&lt;br /&gt;
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),&lt;br /&gt;
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),&lt;br /&gt;
        new Symfony\Bundle\TwigBundle\TwigBundle(),&lt;br /&gt;
        new Symfony\Bundle\MonologBundle\MonologBundle(),&lt;br /&gt;
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),&lt;br /&gt;
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),&lt;br /&gt;
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),&lt;br /&gt;
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),&lt;br /&gt;
    );&lt;br /&gt;
 &lt;br /&gt;
    if (in_array($this-&amp;gt;getEnvironment(), array('dev', 'test'))) {&lt;br /&gt;
        $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();&lt;br /&gt;
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();&lt;br /&gt;
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();&lt;br /&gt;
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return $bundles;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creació del primer bundle ==&lt;br /&gt;
Crea un bundle a la teva aplicació amb el nom Hola seguin la nomenclatura de bundles (NomAplicacio/NomFuncionalitatBundle) en format '''yml'''.&lt;br /&gt;
&lt;br /&gt;
'''Creant un bundle'''&lt;br /&gt;
&lt;br /&gt;
L'edició estàndard de Symfony inclou una comanda per crear bundles totalment funcionals d'una manera molt senzilla. Per descomptat, també pots crear els bundles a mà si ho prefereixes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
php app/console generate:bundle --namespace=NomAplicacio/NomFuncionalitatBundle --format=yml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Estructura de directoris d'un bundle==&lt;br /&gt;
L'estructura de directoris d'un bundle és simple i flexible. Per defecte el sistema de '''bundles''' segueix una sèrie de convencions que ajuden a mantenir el codi consistent entre tots els bundles Symfony2. Fa un cop d'ull a '''AcmeHelloBundle''', ja que conté alguns dels elements més comuns d'un bundle:&lt;br /&gt;
&lt;br /&gt;
*'''Controller/''': conté els controladors del bundle (per exemple, HelloController.php).&lt;br /&gt;
*'''DependencyInjection/''': conté elements relacionats amb el contenidor d'injecció de dependències. Entre unes altres, conté les extensions per a les classes d'injecció de dependències, la configuració que importen els serveis i registra un o més passades del compilador (aquest directori no és obligatori).&lt;br /&gt;
*'''Resources/config/''': conté la configuració, incloent la configuració de enrutamiento (per exemple, routing.yml).&lt;br /&gt;
*'''Resources/views/''': conté les plantilles organitzades segons el nom del controlador (per exemple, Hello/index.html.twig).&lt;br /&gt;
*'''Resources/public/''': conté recursos web (imatges, fulles d'estil, etc.) i és copiat o enllaçat simbòlicament al directori web/ del projecte amb el comando assets:install.&lt;br /&gt;
*'''Tests/''': té els tests unitaris i funcionals del bundle.&lt;br /&gt;
&lt;br /&gt;
==Configurant l'aplicació==&lt;br /&gt;
L'aplicació està formada per una col·lecció de bundles que representen totes les característiques i capacitats de la teva aplicació. Cada bundle es pot personalitzar a través d'arxius de configuració escrits en YAML, XML o PHP. De forma predeterminada, l'arxiu de configuració principal es troba en el directori '''app/config/''' i es diu '''config.yml''', '''config.xml''' o '''config.php''' en funció del format que prefereixis.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# app/config/config.yml&lt;br /&gt;
imports:&lt;br /&gt;
    - { resource: parameters.yml }&lt;br /&gt;
    - { resource: security.yml }&lt;br /&gt;
&lt;br /&gt;
framework:&lt;br /&gt;
    secret:          &amp;quot;%secret%&amp;quot;&lt;br /&gt;
    router:          { resource: &amp;quot;%kernel.root_dir%/config/routing.yml&amp;quot; }&lt;br /&gt;
    # ...&lt;br /&gt;
 &lt;br /&gt;
# Twig Configuration&lt;br /&gt;
twig:&lt;br /&gt;
    debug:            &amp;quot;%kernel.debug%&amp;quot;&lt;br /&gt;
    strict_variables: &amp;quot;%kernel.debug%&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ara que ja està configurat el bundle, pots començar a construir la teva aplicació dins del bundle.&lt;br /&gt;
==Exemple per crear l'aplicació==&lt;br /&gt;
*'''Pas 1: Creant la ruta'''&lt;br /&gt;
Per defecte, l'arxiu de configuració d'encaminament en una aplicació Symfony2 es troba en '''app/config/routing.yml'''. Si ho prefereixes, i igual que en la resta de la configuració en Symfony2, pots utilitzar el format XML o PHP per configurar les teves rutes.&lt;br /&gt;
&lt;br /&gt;
Si et fixes en l'arxiu d'encaminament principal, veuràs que Symfony ja ha agregat una entrada en generar el bundle ProvesHolaBundle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# app/config/routing.yml&lt;br /&gt;
acme_hello:&lt;br /&gt;
    resource: &amp;quot;@ProvesHolaBundle/Resources/config/routing.yml&amp;quot;&lt;br /&gt;
    prefix:   /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquesta directiva de configuració li diu a Symfony que carregui la configuració d'encaminament de l'arxiu '''Resources/config/routing.yml''' que es troba a l'interior del '''bundle ProvesHolaBundle'''.&lt;br /&gt;
&lt;br /&gt;
En altres paraules, pots configurar les teves rutes directament en l'arxiu '''app/config/routing.yml''' o pots definir-les en diverses parts de l'aplicació i després les importes des d'aquest arxiu.&lt;br /&gt;
&lt;br /&gt;
Ara que l'arxiu '''routing.yml''' del bundle s'importa des de l'arxiu d'encaminament principal de l'aplicació, afegeix la nova ruta que defineix la URL de la pàgina que ets a punt de crear:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# src/Proves/HolaBundle/Resources/config/routing.yml&lt;br /&gt;
hello:&lt;br /&gt;
    path:     /hello/{name}&lt;br /&gt;
    defaults: { _controller: ProvesHolaBundle:Hola:index }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La ruta es compon bàsicament de dues parts: el '''path''', que és la URL amb la qual ha de coincidir la petició de l'usuari per activar la ruta, i un '''array anomenat defaults, que especifica el controlador que s'executa'''. Les parts de la URL tancades entre cometes indiquen que el seu valor pot variar. D'aquesta forma, '''{name}''' significa que les URL '''/hello/Ryan, /hello/Fabien''' o qualsevol altra URI similar coincidirà amb aquesta ruta. El valor de les parts variables també es passa al controlador, que pot accedir a ells a través del nom assignat en la pròpia ruta (''name'' en aquest cas).&lt;br /&gt;
&lt;br /&gt;
*'''Pas 2: Creant el controlador'''&lt;br /&gt;
&lt;br /&gt;
Quan l'usuari sol·licita la URL '''/hello/Ryan''', s'activa la '''ruta hello''', a la qual correspon el controlador '''ProvesHolaBundle:Hola:index''', que és realment el codi que s'executa. El segon pas del procés de creació de pàgines consisteix precisament a crear aquest controlador.&lt;br /&gt;
&lt;br /&gt;
La cadena '''ProvesHolaBundle:Hola:index''' és el nom lògic del controlador, que '''es tradueix com el mètode indexAction()''' d'una classe PHP  '''Proves\HolaBundle\Controller\Hola'''. Crea en primer lloc aquest arxiu dins del teu bundle ProvesHolaBundle:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// src/Proves/HolaBundle/Controller/HolaController.php&lt;br /&gt;
namespace Proves\HolaBundle\Controller;&lt;br /&gt;
 &lt;br /&gt;
use Symfony\Component\HttpFoundation\Response;&lt;br /&gt;
 &lt;br /&gt;
class HolaController&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En realitat, el controlador no és més que un mètode PHP que tu creguis i Symfony executa. Aquí és on el codi utilitza la informació de la petició per construir i preparar el recurs sol·licitat. Excepte en alguns casos avançats, el resultat final d'un controlador sempre és el mateix: un objecte '''Response''' de Symfony2.&lt;br /&gt;
&lt;br /&gt;
Crea el mètode '''indexAction''' que Symfony executarà quan se serveixi la ruta hola:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// src/Proves/HolaBundle/Controller/HolaController.php&lt;br /&gt;
 &lt;br /&gt;
// ...&lt;br /&gt;
class HolaController&lt;br /&gt;
{&lt;br /&gt;
    public function indexAction($name)&lt;br /&gt;
    {&lt;br /&gt;
        return new Response('&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Hola '.$name.'!&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El controlador és molt senzill: crea un nou objecte de tipus Response i el primer argument del qual és el contingut que s'utilitza per crear la resposta enviada a l'usuari (en aquest cas, una pàgina HTML molt simple).&lt;br /&gt;
&lt;br /&gt;
Enhorabona! Després de crear solament una ruta i un controlador ja tens una pàgina completament funcional! Si tot ho has configurat correctament, l'aplicació ha de donar-te la benvinguda en accedir a la següent URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/app_dev.php/hola/alex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
També pots generar controladors de manera automàtica utilitzant una comanda:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
php app/console generate:controller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El tercer i últim pas per crear una pàgina és opcional però gairebé totes les aplicacions ho fan: crear una plantilla.&lt;br /&gt;
&lt;br /&gt;
'''Pas 3 opcional: Creant la plantilla'''&lt;br /&gt;
&lt;br /&gt;
Les plantilles et permeten moure tota la part de la vista (és a dir, el codi HTML) a un arxiu separat i reutilitzar diferents parts del disseny de la pàgina. En comptes d'escriure el codi HTML dins del controlador, genera el codi HTML a partir d'una plantilla en format '''TWIG''':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// src/Proves/HolaBundle/Controller/HolaController.php&lt;br /&gt;
namespace Acme\HelloBundle\Controller;&lt;br /&gt;
 &lt;br /&gt;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;&lt;br /&gt;
 &lt;br /&gt;
class HolaController extends Controller&lt;br /&gt;
{&lt;br /&gt;
    public function indexAction($name)&lt;br /&gt;
    {&lt;br /&gt;
        return $this-&amp;gt;render('ProvesHolaBundle:Hello:index.html.twig', array('name' =&amp;gt; $name));&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El mètode '''render()''' crea un objecte Response i li afegeix el contingut resultant de renderizar la plantilla. Així que com qualsevol altre controlador, el codi anterior realment està retornant un objecte de tipus Response.&lt;br /&gt;
&lt;br /&gt;
Tingues en compte que pots processar les plantilles de dues formes diferents. Per defecte Symfony2 admet dos llenguatges de plantilles: les clàssiques plantilles creades amb PHP i les noves i concises plantilles creades amb '''Twig'''. No t'espantis perquè pots triar lliurement quin utilitzar o fins i tot barrejar les dues en el mateix projecte.&lt;br /&gt;
&lt;br /&gt;
En processar la plantilla ProvesHolaBundle:Hola:index.html.twig, el controlador utilitza la següent convenció de nomenclatura:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NombreBundle:NombreControlador:NombrePlantilla&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
Aquest és el nom lògic de la plantilla, que es tradueix a un arxiu físic utilitzant la següent convenció:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/ruta/a/Nombrebundle&amp;gt;/Resources/views/&amp;lt;NombreControlador&amp;gt;/&amp;lt;NombrePlantilla&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En aquest cas, ProvesHolaBundle és el nom del bundle, Hola és el controlador i index.html.twig la plantilla:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{# src/Proves/HolaBundle/Resources/views/Hola/index.html.twig #}&lt;br /&gt;
{% extends '::base.html.twig' %}&lt;br /&gt;
 &lt;br /&gt;
{% block body %}&lt;br /&gt;
    Hello {{ name }}!&lt;br /&gt;
{% endblock %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vegem la situació a través de la plantilla Twig línia per línia:&lt;br /&gt;
&lt;br /&gt;
L'etiqueta''' extends '''indica que s'utilitza una plantilla pare on es defineix el disseny del lloc web.&lt;br /&gt;
L'etiqueta '''block''' indica que tot el seu contingut s'ha de col·locar dins d'un bloc anomenat body. Com s'explicarà més endavant, la plantilla pare '''(base.html.twig)''' és la responsable de definir aquest bloc i de mostrar-ho a la pàgina HTML adequadament.&lt;br /&gt;
La plantilla pare s'indica com '''::base.html.twig''', per la qual cosa no inclou ni la part del nom del bundle ni la del nom del controlador (d'aquí els dos punts dobles '''(::)''' al principi). Això significa que '''la plantilla no es troba dins de cap bundle''', sinó en el directori app del projecte:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
{# app/Resources/views/base.html.twig #}&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;{% block title %}Welcome!{% endblock %}&amp;lt;/title&amp;gt;&lt;br /&gt;
    {% block stylesheets %}{% endblock %}&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;{{ asset('favicon.ico') }}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
    {% block body %}{% endblock %}&lt;br /&gt;
    {% block javascripts %}{% endblock %}&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asalinas</name></author>	</entry>

	</feed>