[Parte 1] - Symfony2 configurazione e modelli ¶
Panoramica ¶
Questo capitolo spiegherà i primi passi per la creazione di un Symfony2 website. Scarichiamo e configuriamo Symfony2 Standard Distribution, creiamo Blog bundle e mettiamo insieme il primo HTML templates. Alla fine di questo capitolo avremo costruito le prime parti di un Symfony2 website che sarà disponibile in un dominio locale es http://symblog.dev/. Il website conterra le principali strutture HTML e alcuni iniziali contenuti del blog
Argomenti trattati in questo capitolo:::
- Impostazione di un'applicazione Symfony2
- Configurazione di un dominio di sviluppo
- Symfony2 Bundles
- Routing
- Controllori
- Template con twig
Download e Setup ¶
Noi useremo la Sy2 Standard DistribuzioneQuesta distribuzione viene già completa con le principali librerie di Sy2 e i più comuni bundles richiesti per creare un web site. Tu puoi Download il pacchetto Sy2 dallo stesso sito di Sy2 Dove puoi anche trovare un eccellente documentazione e prendere dei riferimenti per l'installazione.Installing and Configuring Symfony2 in questa guida puoi seguire il processo per scaricare i pacchetti e come puoi impostare i giusti permessi per le cartelle.
Attenzione
Impostazioni Setting up Permissions porre particolare cura nell'impostare i permessi per le cartelle app/cache e app/log im modo che il server e la linea di comando possano scriverci dentro
Creazione di un dominio di sviluppo ¶
Lo scopo di questo tutorial è di usare il dominio locale http://symblog.dev/, ma puoi anche sceglierne un altro..Queste istruzioni sono specifiche per Apache e si presume che tu abbia un server Apache installato nella tua macchina.Tu puoi impostare il tuo dominio locale anche su server differenti come nginx.
Nota
Questi passaggi sono stati effettuati sulla distribuzione Linux Fedora così i nomi dei percorsi, ecc, possono variare a seconda del sistema operativo.
Iniziamo
creando un virtual host su Apache apportando le seguenti impostazioni
sul file di configurazionenel sul sistema operativo Fedora è localizzato
a /etc/httpd/conf/httpd.conf.
Devi editare questo con i privilegi di amministratore.In un sistema
operativo windows con xampp per esempio puoi trovare questo file a
C:/xampp/apache/config/extra/httpd.vhost.conf
# / Etc / httpd / conf / httpd.conf
NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
ServerName symblog.dev
DocumentRoot "/ var / www / html / symblog.dev / web"
DirectoryIndex app.php
<Directory "/var/www/html/symblog.dev/web">
AllowOverride All
Allow from All
</ Directory>
</ VirtualHost>
Ora aggiungi un nuovo dominio in fondo all host file /etc/hosts. Ancora con i privilegi di amministratore,In windows puoi mettere questo file in C:/windows/system32/drivers/etc
# / Etc / hosts
127.0.0.1 symblog.dev
Infine non dimenticate di riavviare il servizio Apache.
$ sudo service httpd restart
Punta
Se vi trovate a creare domini virtuali per tutto il tempo, è possibile semplificare questo processo utilizzando host virtuali dinamici .
Si dovrebbe ora essere in grado di visitare http://symblog.dev/app_dev.php/ .

Se questa è la tua prima visita alla pagina di benvenuto di Sy2, prendetevi del tempo per visualizzare le pagine demo. Ogni pagina offre frammenti di codice che dimostrano come ogni pagina funziona dietro le quinte.
Note
Tu noterai una toolbar in fondo alla pagina di benvenuto ,questa è la toolbar di sviluppo e darà a te preziose informazioni circa lo stato dell'applicazione includendo il tempo di apertura,la memoria usata,le query del database,lo stato di autenticazione e molto altro.Di default la toolbar è visibile solo nello sviluppo mostrando la toolbar nella produzione si ha un grande rischio su la sicurezza essendo visibile in essa molte informazioni su la tua applicazione
Configurazione Symfony: Interfaccia Web ¶
Sy2
introduce un web interface per configurare vari aspetti che riguardano
un web site come per esempio le impostazioni per il database.Per questo
progetto è richiesto un database quindi iniziamo usando il
configuratore.
Apri http://symblog.dev/app_dev.php/ e clicca sul bottone di configurazione.. Metti i dettagli di impostazione del database (questo tutorial presume l'uso di Mysql ma si può scegliere anche un altro database.Proseguendo si genera un CSFR token utile per la sicurezza dell'applicazione.. Quindi ti saranno mostrate le impostazioni che Sy2 ha generato.Presta attenzione alle comunicazioni sulla pagina,è probabile che la tuaapp/config/parameters.ini file non sia scrivibile,quindi sarà necessario copiare e incollare i dati direttamente nel file.
Bundles: Symfony2 Building Blocks ¶
I
bundles sono i mattoni di base di qualsiasi applicazione Sy2.Difatti il
framework Sy2 è di persè un bundle.I bundle ci permettono di separare
le funzionalità e forniscono unità di codice che può essere riutilizzato
,essi hanno lo scopo di racchiudere tutte le esigenze come
controller,modello,modelli e risorse come css e immagini..Creiamo un
bundle per il nostro sito in namespace Blogger,se non si ha familiarità
con i namespace si dovrebbe dedicare un approfondimento sull'argomento
in quanto Sy2 ne fà largo uso.In Sy2 tutto è namespace. Puoi vedere Symfony2
autoloader per avere un idea sul caricamento degli archivi.
Nota
Una buona comprensione dei namespace può aiutare a risolvere alcuni problemi.
Creazione del bundle ¶
Per racchiudere le funzionalità del blog creiamo un BlogBundle.Questo ospiterà tutti i file necessari Sy2 è dotato di alcuni comandi che ci
possono aiutare per le comuni operazioni da svolgere Uno di questi comandi serve per la creazione di un bundle
Esegui il sottostante comando.Ti verranno presentate diverse istruzioni per creare il bundle.Usa tutte le istruzioni predefinite
$ php app/console generate:bundle --namespace=Blogger/BlogBundle --format=yml
Con questa operazione tu hai costruito un layout bundle di base.
Nota
Se tu non vuoi usare i comandi di Sy2 puoi creare manualmente la tua struttura di cartelle per il bundle.Anche se non è obbligatorio usare essi offrono alcuni vantaggi in velocità e per la copertura delle funzionalità per avere un pacchetto installato e funzionante .
Registrazione del bundle ¶
Il tuo bundle BloggerBlogBundle è stato registrato nella kernel localizzata int app/AppKernel.php. Sy2 ci richiede di registrare tutti i bundle di cui abbiamo bisogno per far funzionare l'applicazione.Tu noterai che alcuni bundle sono registrati solo negli ambienti dev o test caricare questi nell'ambiente prod (production) porterebbe solo ad un sovraccarico per funzionalità non usate Il frammento di codice seguente mostra come il bundle BloggerBlogBundle è stato registrato.
// app/AppKernel.php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ..
new Blogger\BlogBundle\BloggerBlogBundle(),
);
// ..
return $bundles;
}
// ..
}
Routing ¶
Con il comando precedente è stata creata anche la rotta principale dell'applicazione app/config/routing.yml.
# app/config/routing.yml
BloggerBlogBundle:
resource: "@BloggerBlogBundle/Resources/config/routing.yml"
prefix: /
L'opzione prefix ci permette di montare l'intero BloggerBlogBundle con un prefisso. Nel nostro caso abbiamo otato per montare il valore predefinito che è/. Se per esempio volete che tutti i percorsi siano preceduti da /blogger cambiate in prefix: /blogger.
Struttura di default¶
Sotto la cartella SRC è stato creato un pacchetto predefinito.Questo inizia con il livello superiore alla cartella Blogger che mappa direttamente allo spazio dei nomi Blogger,sotto questo abbiamo BlogBundle che contiene il pacchetto vero e proprio .Il contenuto di questa cartella verra esaminato più avanti seguendo il tutorial.Se avete familiarità con MVC alcune cartelle saranno autoesplicative.
Il controller di default ¶
Con il comando per la creazione del bundle abbiamo anche creato ,un controller di default.Possiamo eseguire questo controller andando a http://symblog.dev/app_dev.php/hello/symblog si vedrà una semplice pagina di saluto,prova a cambiare la parte symblog del url con il tuo nome .Si può quindi vedere come questa pagina è stata generata
Routed ¶
BloggerBlogBundle file di rotta che si trova in src / Blogger / BlogBundle / Resources / config / routing.yml contiene la seguente regola di routing.
# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_homepage:
pattern: /hello/{name}
defaults: { _controller: BloggerBlogBundle:Default:index }#
Le rotte sono composte di un percorso e da alcune opzioni di default.Il percorso viene confrontato con l'URL e le opzioni di default se tutto coincide da il via all'eseguzione del controllore.Nel percorso ciao {nome} il valore nome corrisponderà come segnaposto in quanto non specificato .
Il controller ¶
Il controllore in questo esempio è molto semplice. La classe DefaultController estende la classel controller che fornisce alcuni metodi utili come il render metodo utilizzato qui di seguito. Nella rotta abbiamo definito un segnaposto questo viene passato all' azione come argomento $name . L'azione non fa altro che chiamare il render specificando il metodo index.html.twig nel modulo BloggerBlogBundle. Il formato del nome del modello è bundle: controller: template . Nel nostro esempio, questo è BloggerBlogBundle: Default: index.html.twig che corrisponde alla index.html.twig modello, nel predefinito cartella vista del BloggerBlogBundle , o fisicamente al file src / Blogger / BlogBundle / Resources / views / default / index.html.twig . Diverse varianti del formato modello può essere usato per rendere i modelli in diverse posizioni all'interno dell'applicazione e dei suoi bundle. Vedremo più avanti in questo capitolo.
Ora possiamo passare la variabile $name all'opzione array
<?php
// src/Blogger/BlogBundle/Controller/DefaultController.php
namespace Blogger\BlogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function indexAction($name)
{
return $this->render('BloggerBlogBundle:Default:index.html.twig', array('name' => $name));
}
}
Il templating (The View) ¶
Come potete vedere il templating è molto semplice. Viene stampato Ciao seguito dal nome argomento passato dal controllore.
{# Src / Blogger / BlogBundle / Resources / views / default / index.html.twig #}
Hello {{ name }}!
Pulizia ¶
Poiché non abbiamo bisogno di alcuni dei file di default creati dal generatore si possono eliminare.
Il file di controllo src / Blogger / BlogBundle / Controller / DefaultController.php può essere cancellato, insieme alla cartella di views e il suo contenuto in src / Blogger / BlogBundle / Resources / views / default / . Togliere infine il percorso definito in src / Blogger / BlogBundle / Resources / config / routing.yml
Templating ¶
Ci sono 2 opzioni di default quando si usa Symfony2 per templating; Twig e PHP. Naturalmente è possibile anche non utilizzare nessuna di queste e optare per una libreria diversa. Questo è possibile grazie Symfony2 Container Dependency Injection .Per la nostra applicazione Useremo Twig come motore di template per una serie di motivi.
- Twig è veloce - Twig compila i template in classi PHP quindi non c'è poco overhead da utilizzare ..
- Twig è conciso - Twig ci permette di eseguire le funzionalità di modellazione con molto poco codice. Confronta questo con il PHP dove alcune affermazioni diventano molto dettagliate.
- Twig supporta l'ereditarietà dei template - Questo è uno dei miei favoriti personali. I template hanno la capacità di estendere e sostituire altri templatei che permettono ai template figli di cambiare le impostazioni di default forniti dai loro genitori.
- Twig è sicuro - Twig ha output escaping attivata per impostazione predefinita e fornisce anche un ambiente in sandbox per i template importati.
- Twig è estensibile - Twig ha molte funzionalità comuni di base come motore di template, ma per quelle occasioni in cui è necessario alcune funzionalità su misura in più, Twig può essere facilmente esteso.
Questi sono solo alcuni dei vantaggi di Twig. Per maggiori motivi per cui si dovrebbe usare Twig vedi la documentazione ufficiale Twig sito.
Struttura del layout ¶
Twig supporta l'ereditarietà dei template, andremo ad utilizzare unl livello di terza eredità per la nostra applicazione. Questo approccio ci consente di modificare la visualizzazione a 3 livelli distinti all'interno dell'applicazione, dandoci un sacco di spazio per le personalizzazioni.
Template principale - Livello 1 ¶
Iniziamo creando il nostro template (blocco di base)per symblog. Abbiamo bisogno di 2 file qui, il template.html e il CSS. Symfony2 supporta HTML5 quindi andremo ad utilizzarlo.
<!-- app/Resources/views/base.html.twig -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html"; charset=utf-8" />
<title>{% block title %}symblog{% endblock %} - symblog</title>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
{% block stylesheets %}
<link href='http://fonts.googleapis.com/css?family=Irish+Grover' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=La+Belle+Aurore' rel='stylesheet' type='text/css'>
<link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" />
{% endblock %}
<link rel="shortcut icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
<section id="wrapper">
<header id="header">
<div class="top">
{% block navigation %}
<nav>
<ul class="navigation">
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
{% endblock %}
</div>
<hgroup>
<h2>{% block blog_title %}<a href="#">symblog</a>{% endblock %}</h2>
<h3>{% block blog_tagline %}<a href="#">creating a blog in Symfony2</a>{% endblock %}</h3>
</hgroup>
</header>
<section class="main-col">
{% block body %}{% endblock %}
</section>
<aside class="sidebar">
{% block sidebar %}{% endblock %}
</aside>
<div id="footer">
{% block footer %}
Symfony2 blog tutorial - created by <a href="https://github.com/dsyph3r">dsyph3r</a>
{% endblock %}
</div>
</section>
{% block javascripts %}{% endblock %}
</body>
</html>
Nota
Ci sono 3 file esterni in questo template, uno è JavaScript e CSS 2. Il file JavaScript fissa la mancanza di supporto di HTML5 nel browser IE pre versione 9. I due file CSS importano i font da Google Web font.
Questo template rappresenta la struttura principale del nostro sito blogging. La maggior parte del template è costituito da HTML, con la strana Twig direttiva. Twig direttiva che esamineremo ora.
Inizieremo, concentrandosi sulla HEAD del documento. Vediamo il titolo:
<title>{% block title %}symblog{% endblock %} - symblog</title>
La prima cosa che noterete è l'alieno {% tag. Che non è HTML, e non è assolutamente PHP. Questo è uno dei 3 Twig tag. Questo tag è il Twig fare qualcosa di. Viene utilizzato per eseguire le istruzioni come le istruzioni di controllo e per la definizione di elementi di blocco. Un elenco completo delle strutture di controllo possono essere trovati nella documentazione Twig. Il Twig blocco che abbiamo definito nel titolo fa 2 cose, una imposta l'identificatore di blocco al titolo, due fornisce un output di default tra il blocco e la direttiva fineblocco . Con la definizione di un blocco si può usufruire di Twig come template peri l'ereditarietà. Per esempio, in una pagina per visualizzare un post vorremmo il titolo della pagina in modo da riflettere il titolo del blog. Siamo in grado di raggiungere questo obiettivo estendendo il modello e l'override del blocco del titolo.
{% extends '::base.html.twig' %}
{% block title %}The blog title goes here{% endblock %}
Nell'esempio precedente abbiamo ampliato la base delle applicazioni del template che prima avevamo definito per il blocco del titolo. Avrai notato che nella chiamata del template extends sono scomparse le parti bundle e controller.Per eliminarle abbiamo specificato l'uso del livello template in app / resources / views / .
Dopo abbiamo definito un altro title block e impostato alcuni contenuti ,in questo caso il titolo del blog.Cosi il parent template è pronto per contenere un block title che viene poi sovrascritto da quello figlio.Il titolo ora sarà "the blog title goes have symblog".Questa funzionalità di twig può essere usata per estenderla ad altri template
Nel blocco cssviene introdotto l'altro tag di twig .Il tag {{ è il tag "dici qualcosa"
<link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" />
Questo tag viene utilizzato per stampare il valore della variabile o espressione. Nell'esempio di sopra di essa stampa il valore di ritorno della funzione asset .Che ci fornisce un modo portabile per collegare le attività dell' applicazione come css,javascrit,immagini
Il {{ tag possono anche essere combinati con dei filtri per manipolare l'output prima della stampa.
{{ blog.created|date("d-m-Y") }}
Per un elenco completo di filtri controllare la documentazione Twig .
L'ultimo tag twig, che non abbiamo visto nei template è il tag di commento {# . Il suo utilizzo è il seguente:
{# The quick brown fox jumps over the lazy dog #}
Non ci sono altri concetti introdotti in questo template. Esso fornisce il layout principale pronto per personalizzarlo dopo come abbiamo
Ora andiamo ad aggiungere alcuni stili. Creare un foglio di stile a web / css / screen.css e aggiungere il seguente contenuto. Questo aggiungerà stili per il template principale.
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,
strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas
,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;
vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav
,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,
q:after{content:none}table{border-collapse:collapse;border-spacing:0}
body { line-height: 1;font-family: Arial, Helvetica, sans-serif;font-size: 12px; width: 100%; height: 100%; color: #000; font-size: 14px; }
.clear { clear: both; }
#wrapper { margin: 10px auto; width: 1000px; }
#wrapper a { text-decoration: none; color: #F48A00; }
#wrapper span.highlight { color: #F48A00; }
#header { border-bottom: 1px solid #ccc; margin-bottom: 20px; }
#header .top { border-bottom: 1px solid #ccc; margin-bottom: 10px; }
#header ul.navigation { list-style: none; text-align: right; }
#header .navigation li { display: inline }
#header .navigation li a { display: inline-block; padding: 10px 15px; border-left: 1px solid #ccc; }
#header h2 { font-family: 'Irish Grover', cursive; font-size: 92px; text-align: center; line-height: 110px; }
#header h2 a { color: #000; }
#header h3 { text-align: center; font-family: 'La Belle Aurore', cursive; font-size: 24px; margin-bottom: 20px; font-weight: normal; }
.main-col { width: 700px; display: inline-block; float: left; border-right: 1px solid #ccc; padding: 20px; margin-bottom: 20px; }
.sidebar { width: 239px; padding: 10px; display: inline-block; }
.main-col a { color: #F48A00; }
.main-col h1,
.main-col h2
{ line-height: 1.2em; font-size: 32px; margin-bottom: 10px; font-weight: normal; color: #F48A00; }
.main-col p { line-height: 1.5em; margin-bottom: 20px; }
#footer { border-top: 1px solid #ccc; clear: both; text-align: center; padding: 10px; color: #aaa; }
Template Bundle - Livello 2 ¶
Ora andiamo a creare un layout per il bundle Blog. Creare un file in src / Blogger / BlogBundle / resources / views / layout.html.twig e aggiungere il seguente contenuto.
{# src/Blogger/BlogBundle/Resources/views/layout.html.twig #}
{% extends ':: base.html.twig'%}
{% Block% sidebar}
Sidebar contenuti
{% endblock %}
A prima vista questo modello può sembrare un po 'semplice, ma la sua semplicità è la chiave. In primo luogo si estende il base template che abbiamo creato in precedenza. In secondo luogo si sostituisce il blocco sidebar genitore con qualche contenuto fittizio. Come la barra laterale che sarà presente su tutte le pagine del nostro blog ha senso effettuare la personalizzazione a questo livello cI si può chiedere perché non mettere la personalizzazione del modello nell' applicazione in quanto sarà presente su tutte le pagine. Questo è semplice, l'applicazione non sa nulla della Bundle e non deve. Il bundle deve contenere tutte le sue funzionalità e rendere la barra laterale è parte di questa funzionalità. OK, allora perché non ci basta posizionare la barra laterale in ognuno dei modelli di pagina? Anche in questo caso è semplice, avremmo dovuto duplicare il sidebar ogni volta che andiamo ad aggiungere una nuova pagina. Inoltre questo template di livello 2 ci dà la flessibilità in futuro di aggiungere altre personalizzazioni che tutti i template i figli erediteranno. Per esempio, potremmo voler modificare la copia piè di pagina su tutte le pagine, questo sarebbe un ottimo posto per fare questo.
Modello di pagina - Livello 3 ¶
Finalmente siamo pronti per il layout controller. Questi layout sarà normalmente legato a una azione di controllo, vale a dire, l'azione show blog avrà un template blog show.
Iniziamo creando il controller per la homepage e il relativo template. Poiché questa è la prima pagina che stiamo creando è necessario per creare il controller. Creare il controller in src / Blogger / BlogBundle / Controller / PageController.php e aggiungere quanto segue:
<?php
// src/Blogger/BlogBundle/Controller/PageController.php
namespace Blogger\BlogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class PageController extends Controller
{
public function indexAction()
{
return $this->render('BloggerBlogBundle:Page:index.html.twig');
}
}
Ora creiamo il template per questa azione. Come si può vedere nella azione del controllore stiamo per rendere il template della homepage. Creiamo il template in src / Blogger / BlogBundle / Resources / views / Page / index.html.twig
{# Src / Blogger / BlogBundle / Resources / views / Page / index.html.twig #}
{% extends 'BloggerBlogBundle :: layout.html.twig'%}
{% Block% body}
Blog homepage
{% endblock %}
Questo introduce il formato finale del template che possiamo specificare.
Ora andiamo ad aggiungere una route per la nostra homepage. Aggiornare il Bundle la configurazione di routing trova in src / Blogger / BlogBundle / Resources / config / routing.yml .
# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_homepage:
pattern: /
defaults: { _controller: BloggerBlogBundle:Page:index }
requirements:
_method: GET
Infine abbiamo bisogno di rimuovere il percorso predefinito per la schermata di benvenuto Symfony2. Rimuovere ilpercorso _welcome nella parte superiore del dev file di routing che si trova in app / config / routing_dev.yml .
Siamo ora pronti per vedere il nostro template di blogger. Puntate il vostro browser per http://symblog.dev/app_dev.php/ .

Si dovrebbe vedere il layout di base del blog, con il contenuto principale e sidebar che riflette come abbiamo impostato i blocchi dei template.
Informazioni su Pagina ¶
Il compito finale in questa parte del tutorial sarà la creazione di una pagina statica per la pagina About. Questo dimostrerà come collegare le pagine insieme, e andiamo a rafforzare il metodo a tre livelli per i template,che abbiamo adottato.
La rotta ¶
Quando si crea una nuova pagina, uno dei primi compiti e di creare il relativo percorso. Aprire il file delle rotte che si trova in src / Blogger / BlogBundle / Resources / config / routing.yml e aggiungere la seguente regola di routing.
# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_about:
pattern: /about
defaults: { _controller: BloggerBlogBundle:Page:about }
requirements:
_method: GET
Il controller ¶
Dopo di che apriamo il file di controllo situato in src / Blogger / BlogBundle / Controller / PageController.php e aggiungiamo l'azione per gestire la pagina About.
/ / Src / Blogger / BlogBundle / Controller / PageController.php
class PageController extends Controller
{
// ..
public function aboutAction()
{
return $this->render('BloggerBlogBundle:Page:about.html.twig');
} }
The View ¶
Per la vista, creare un nuovo file in src / Blogger / BlogBundle / Resources / views / Page / about.html.twig e copiamo il seguente contenuto.
{# Src / Blogger / BlogBundle / Resources / views / Page / about.html.twig #}
{% extends 'BloggerBlogBundle :: layout.html.twig'%}
{% Block title%} {% Circa blocco terminale%}
{% Block% body}
<header>
<h1> Chi symblog </ h1>
</ header>
<Article>
<p> Donec imperdiet ante sed diam consequat et dictum erat faucibus. Aliquam sit
amet vehicula leo. Morbi urna dui, et tempor ac posuere, rutrum a dui.
Curabitur neque quam, ut ultricies imperdiet id, ornare Varius Arcu. Ut congue
urna sit amet tellus malesuada nec Elementum risus molestie. Donec Gravida
tellus sed tortor adipiscing fringilla. Donec nulla MAURIS, mollis egestas
condimentum laoreet, Lacinia lorem vel. Morbi vitae justo sit amet felis
vehicula Commodo uno lacus placerat. Mauris a est elit, nec vehicula urna. Duis uno
Lacus nisl. Vestibolo ante ipsum primis in faucibus orci luctus et ultrices
posuere cubilia curae. </ p>
</ article>
{% endblock %}
La pagina è su niente di spettacolare. La sua azione è solo il rendering di un file di template con un certo contenuto fittizio. Ciò tuttavia ci porta al prossimo compito.
Collegamento delle pagine ¶
Ora abbiamo la pagina About pronta. Dai un'occhiata a http://symblog.dev/app_dev.php/about per vederla. Allo stato attuale non c'è modo per un utente del vostro blog di vedere la pagina about, a meno di digitare l'URL completo, proprio come abbiamo fatto. Come c'era da aspettarsi Symfony2 fornisce entrambi i lati per l'equazione di routing. Si può abbinare percorsi come abbiamo visto, e si può anche generare URL da questi percorsi. Si dovrebbe sempre utilizzare le funzioni di routing fornite da Symfony2. Mai nella vostra applicazione dovrebbe essere tentati di mettere le seguenti.
<a href="/contact">Contact</a>
<?php $this->redirect("/contact"); ?>
Ci si potrebbe chiedere cosa c'è di sbagliato in questo approccio, può essere il modo di collegare sempre le pagine insieme. Tuttavia, vi sono una serie di problemi con questo approccio.
- Esso utilizza un collegamento fisso e ignora il completamente il sistema Symfony2 di routing . Se si voleva cambiare la posizione della pagina dei contatti, in qualsiasi punto si dovrebbe trovare tutti i riferimenti e modificarli.
- Si ignora i controller di ambiente.Gli Ambienti è qualcosa che non abbiamo ancora spiegato, ma in realtà li abbiamo utilizzati. Il app_dev.php front controller ci fornisce l'accesso alla nostra applicazione in dev ambiente. Se si dovesse sostituire il app_dev.php con app.php verrà eseguita l'applicazione nella prod ambiente. Il significato di questi ambienti sarà spiegato più avanti nel tutorial, ma per ora è importante notare che il collegamento fisso, sopra definito non mantiene l'attuale contesto di front controller che viene anteposto alla URL.
Il modo corretto per collegare le pagine è con il percorso e url metodi forniti da Twig. Sono entrambi molto simili, tranne cheil medoto url ci fornirà URL assoluti.
Aggiorniamo il template principale dell'applicazione in / app / views / Resources base.html.twig collegare la pagina about sulla home page.
<! - App / Resources / views / base.html.twig ->
{% block navigation %}
<nav>
<ul class="navigation">
<li><a href="{{ path('BloggerBlogBundle_homepage') }}">Home</a></li>
<li><a href="{{ path('BloggerBlogBundle_about') }}">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
{% endblock %}
Ora aggiornare il browser per vedere la home e about page e controlliamo se lavorano nel modo previsto.. Se si visualizza il sorgente per le pagine si noterà che il link è stato preceduto da / app_dev.php / . Questo è il front controller come spiegato sopra, e come si può vedere l'utilizzo del percorso l'ha mantenuto.
Infine,i aggiorniamo i collegamenti per reindirizzare il logo alla homepage. Aggiorniamo il template in / app / views / Resources base.html.twig .
<! - App / Resources / views / base.html.twig ->
<hgroup>
<h2>{% block blog_title %}<a href="{{ path('BloggerBlogBundle_homepage') }}">symblog</a>{% endblock %}</h2>
<h3>{% block blog_tagline %}<a href="{{ path('BloggerBlogBundle_homepage') }}">creating a blog in Symfony2</a>{% endblock %}</h3>
</hgroup>
Conclusione ¶
Abbiamo coperto le aree di base per quanto riguarda l'applicazione Symfony2 compreso spostare l'applicazione configurata e funzionante. Abbiamo cominciato ad esplorare i concetti fondamentali alla base di un'applicazione Symfony2, tra cui routing e il motore twig dei template.
Ora vediamo di creare la pagina Contatto. Questa pagina è leggermente più complessa rispetto alla pagina Informazioni in quanto consente agli utenti di interagire con un modulo web per inviarci richieste. Il prossimo capitolo introdurrà concpets compresi validatori e form