Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 418 lines (387 sloc) 23.9 KB
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8" />
<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
Remove this if you use the .htaccess -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>Symfony f&uuml;r absolute Anf&auml;nger</title>
<link rel="stylesheet" type="text/css" href="stylesheets/bootstrap.css">
<link rel="stylesheet" type="text/css" href="stylesheets/bootstrap-responsive.css">
<link rel="stylesheet" type="text/css" href="stylesheets/trip.css">
<link rel="stylesheet" type="text/css" href="stylesheets/app.css">
<script src="script/jquery-1.9.0.min.js"></script>
<script src="script/trip.min.js"></script>
<script src="script/app.js"></script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<a class="brand" href="http://symfony.com/what-is-symfony">Sprache</a>
<ul class="nav">
<li><a href="index.html" id="de">Deutsch</a></li>
<li><a href="index_en.html" id="en">English</a></li>
<li><a href="index_fr.html" id="fr">Fran&#231;ais</a></li>
<li><a style="cursor:pointer;" class="start-tour" titel="ein kuzer &Uuml;berblick &uuml;ber dieses Tutorial" id="tldr">was steht in diesem Tutorial?</a></li>
</ul>
<ul class="nav pull-right">
<li class="divider-vertical"></li>
<li><a href="https://github.com/peponi/Symfony-for-absolute-beginners">Github</a></li>
</ul>
</div>
</div>
<div class="container">
<div class="row">
</div>
<div class="row">
<!-- Docs nav ================================================= -->
<div class="content">
<div class="span3 bs-docs-sidebar affix">
<a href="http://symfony.com/what-is-symfony"><img src="img/logo_symfony_header.png" alt="Symfony" id="logo_symfony"></a>
<div class="pageination">
<span class="muted marginleft20px"> <- Seite 1</span> |
<a href="index_de_2.html"> Seite 2 -></a>
</div>
<br>
<ul class="nav nav-list bs-docs-sidenav ">
<li><a id="dow" class="pointer"> 1. Download Symfony</a></li>
<li><a id="ubu" class="pointer"> - Installation</a></li>
<li><a id="con" class="pointer"> 2. Konfiguration</a></li>
<li><a id="gi" class="pointer"> 3. Git nicht vergessen</a></li>
<li><a id="dat" class="pointer"> 4. Erstellen der Datenbank</a></li>
<li><a id="rel" class="pointer"> - relations</a></li>
<li><a id="tem" class="pointer"> 5. Einfügen der Templates</a></li>
</ul>
</div>
<div class="span9 offset3">
<div class="span5 offset3 marginbottom20">
<img src="img/a_sensiolabs_product.png" alt="a SensioLabs product" id="sensiolab">
<a href="http://symfony.com/download"> <img src="img/download.jpeg"></a>
</div>
<section id="download">
<h1>Download von <span class="Symfony2">Symfony 2</span></h1>
<p>Zu erst lade die standard Version mit allen Vendors herunter und entpacke sie.</p>
<a href="http://symfony.com/download">Download ></a>
<br><br>
<p>Wer sich die Installation und Konfiguration von Symfony sparen will und gleich mit dem <a href="#database">ORM Design anfagen</a> m&ouml;chte, kann sich alternativ auch eine <a href="http://de.wikipedia.org/wiki/Virtuelle_Maschine">fertige VM</a> saugen.</p>
<dl class="accordion" id="virtualbox">
<dt class="virtualbox blue"><i class="icon-info-sign"></i> VirtualBox Image</dt>
<dd class="virtualbox">
<p><a href="https://de.wikipedia.org/wiki/Virtualbox">VirtualBox</a> ist schnell und mühelos zu <a href="http://VirtualBoxImages.com/GettingStarted">installieren</a>. Der Vorteil liegt darin dass sich die Punkte 1 - 4 nicht jedesmal wiederholen wenn ich ein neues Symfony Projekt anfange, ich kann direkt starten.Ausserdem habe ich durch die Snapshot funktion eine zusätzliche rollback absicherung zusätzlich zu Git.</p>
<p>Lade die Installationsdatei f&uuml;r <a href="https://www.virtualbox.org/wiki/Downloads">OS X und Windows </a>schnell herunter und Installiere es, oder f&uuml;r Ubuntu einfach:</p>
<code>sudo apt-get install virtualbox-4.1</code>
<p>Danach lade das VirtuelBox Image via Torrent. Klicke einfach doppelt drauf, die VM installiert sich dann von allein.</p>
<a href="https://thepiratebay.se/torrent/7868410">Download Torrent ></a><br>
<h5>Login</h5>
<ul class="nonstyletype">
<li>Login: Ubuntu</li>
<li>PW: reverse</li>
<li>MySQL PW: reverse</li>
</ul>
<p>Die Virtuelle Maschine ist momentan im Netzwerkmodus, das heisst der Ubuntu Server bekommt einfach eine Adresse von deinem DHCP Server.</p>
<dl class="accordion">
<dt class="nat blue"><i class="icon-info-sign"></i> Wenn die Maschine nicht von aussen erreichbar sein soll kannst du das ändern, auf NAT.</dt>
<dd class="nat">
<div class="picture maxwidth600 pic1"></div>
<p>Jetzt sind alle Services auf dem Ubuntu Server nur noch &uuml;ber localhost und den Ports die du in der Port-Weiterleitung vergeben hast erreichbar.</p>
<ul class="nonstyletype">
<li><a href="http//127.0.0.1:8080">http//127.0.0.1:8080</a></li>
<li>ssh://127.0.0.1:2222 ---> scp '-P 2222' ubuntu@127.0.0.1</li>
<li><a href="http//127.0.0.1:2121">ftp://127.0.0.1:2121</a></li>
</ul>
</dd>
</dl>
<h5>Symfony ist &uuml;ber folgende Dienste erreichbar:</h5>
<ul class="nonstyletype">
<li>SSH - ssh://ubuntu@IPADRESSE/var/www/Symfony</li>
<li>FTP - ftp://ubuntu@IPADRESSE/var/www/Symfony</li>
<li>SMB - smb://ubuntu@IPADRESSE</li>
<li>Git - git add remote virtualbox ssh://ubuntu@IPADRESSE/var/www/Symfony</li>
</ul>
<dl class="accordion">
<dt class="connection blue"><i class="icon-info-sign"></i> Wie Verbinde ich mich zum Server?</dt>
<dd class="connection">
<p>in Ubuntu einfach mit <b>Ctrl+l</b> die oben genannte Adresse eingeben</p>
<div class="picture maxwidth600 pic2 border"></div>
<p>in Mac OS X einfach mit <b>Apfel+k</b> die ogennante Adresse eingeben</p>
<div class="picture maxwidth600 pic3"></div>
<div class="picture maxwidth600 pic4"></div>
<p>Falls du <b>Aptana Studio 3</b> oder <b>Eclipse</b> benutzt kannst du jetzt den Symfony Ordner direkt über den Samba Share als Projekt hinzufügen.</p>
<p>Klicke <b>File - import...</b></p>
<div class="picture maxwidth600 pic5 border"></div>
<ul class="nonstyletype">Zu finden ist der Samba Share in
<li>Ubuntu unter - <b>/home/Username/.gvfs/</b></li>
<li>Mac OS X unter - <b>/Volumes/Symfony/</b></li>
</ul>
<br>
<p>Oder dessen FTP publishing funktion nutzen. Einfach einen Rechtsklick auf dein (leeres) Projekt dann <b>Publish - Run Web Deployment Wizard ... - FTP/SFTP/FTPS</b>.</p>
<p></p>
<div class="picture maxwidth600 border pic6"></div>
</dd>
</dl>
<dl class="accordion">
<dt class="mysql blue"><i class="icon-info-sign"></i> Wie kann ich die MySQL Datenbank von Aussen erreichen?</dt>
<dd class="mysql">
<p>Wenn du dich mit MySQL Workbench oder anderen Tools zum Server verbinden willst, musst du Ihn vorher <a href="https://support.nbiserv.de/index.php?/Knowledgebase/Article/View/73/0/wie-kann-ich-meinen-mysql-server-von-extern-erreichbar-machen"> noch konfigurieren</a>. <br>Log dich zu erst per SSH auf dem Sever ein:</p>
<code>ssh ubuntu@192.168.xx.xx</code>
<p>Dann rufe die MySQL Konfigurationsdatei auf</p>
<code>sudo vim /etc/mysql/my.cnf</code>
<p>und kommentiere folgende 2 Zeilen aus.</p>
<pre class="highlight">
[...]
#bind-address = 127.0.0.1
#skip-networking
[...]
</pre>
<p>Jetzt muss noch ein MySQL User für <a href="http://svenkalinowski.de/linux-wiki/MySql#head-f4b336b581a6f8fb2acecaae6a983fc27b9f2df3"> externen Zugriff freigeschaltet</a> werden,</p>
<pre class="highlight">
mysql -u root -p mysql
mysql> grant all on symfony.* to 'root' identified by 'mypassword';
mysql> flush privileges;
quit;
</pre> <p>und neustarten.</p>
<code>sudo service mysql restart</code>
<p>Fertig.</p>
</dd>
</dl>
</dd>
</dl>
</section>
<section id="ubuntu">
<h2>Installation für Ubuntu 12.04 / 12.10</h2>
<p>Um die <a href="http://symfony.com/doc/current/reference/requirements.html">Anforderungen</a> für Symfony zu erf&uuml;llen empfiehlt sich schnell den LAMP Stack zu installieren.</p>
<p>
<code>sudo apt-get install lamp-server php5 php5-gd php5-mysql php5-curl php5-cli php5-cgi php5-dev</code>
</p>
<br>
<p>Falls <b>lamp-server</b> nicht über die standard Repositories installieren kann, musst du den MySQL und Apache Server selbst installieren und konfigurieren.</p>
<p>
<code>sudo apt-get install mysql-server apache2 libapache2-mod-php5 php5 php5-gd php5-mysql php5-curl php5-cli php5-cgi php5-dev</code>
</p>
<br>
<p>Die einfachte und beste Methode w&auml;re wohl den <a href="http://wiki.ubuntuusers.de/Apache#Benutzerspezifisch">Apache so zu konfigurieren</a> das auf das Home Verzeichnis zugegriffen werden kann, damit der Programmiercode in <b>deinem Homeverzeichnis</b> unter <b>deinen Userrechten</b> liegen kann.</p>
<p>Wer den noch Symfony in <b>/var/www</b> laufen lassen möchte, muss sich um die <a href="http://symfony.com/doc/current/book/installation.html#configuration-and-setup"> Zugriffsrechte k&uuml;mmern</a>. Wir fügen unseren <b>Username</b> der Gruppe <b>www-data</b> hinzu und machen uns zum Owner des Symfony Ordners, damit wir auch in diesem Verzeichnis Schreibzugriff haben mit unser Entwicklungsumgebung.</p>
<pre class="highlight">
cd /var/www/Symfony
sudo usermod -aG Username www-data
sudo chown -R Username:www-data *
sudo apt-get install acl
sudo setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX app/cache app/logs
</pre>
<p>Wenn das so weit erledigt ist, kannst du mit
<code style="padding:4px">php app/check.php</code> oder unter <a href="http://127.0.0.1/Symfony/web/config.php">http://127.0.0.1/Symfony/web/config.php</a> checken ob alle Anforderungen f&uuml;r den Betrieb von Symfony erf&uuml;llt worden sind.</p>
<b>Wer Symfony auf einem Hosting Service laufen lassen möchte,</b>
<ul>
<li>
<p style="line-height: 1.7;">muss in der <b>Symfony/web/config.php</b> und <b>Symfony/web/app_dev.php</b> seine <a href="http://www.whatsmyip.org/">eigene externe IP Adresse</a> zu der Anweisung <code style="padding:4px">if (!in_array(@$_SERVER['REMOTE_ADDR'], array( ...</code> hinzufügen.</p>
</li>
<li>
<p>kann eventuell nicht in die <b>php.ini</b> schreiben um den <b>short_open_tag</b> aus zu schalten. In diesem Fall muss man eine <b>.htacces</b> Datei im Symfony Ordner anlegen in die wir <b>php_value short_open_tag off</b> schreiben.</p>
<code>echo "php_value short_open_tag off" > .htaccess </code>
</li>
</ul>
</section>
<section id="osx">
<h2>Installation für OS X</h2>
</section>
<section id="windows">
<h2>Installation unter Windows</h2>
</section>
<section id="configuration">
<h1>Konfiguration von Symfony 2</h1>
<p></p>
<p>Wenn der Apache richtig läuft, kannst du jetzt auf diese URL zugreifen und Symfonys Datenbankzugriff Konfigurieren.</p>
<a href="http://127.0.0.1/app_dev.php/_configurator/step/0">http://127.0.0.1/app_dev.php/_configurator/step/0</a>
<p>standart Port für:</p>
<ul>
<li>MySQl = 3306</li>
<li>PostgreSQL = 5432</li>
</ul>
<p>Wenn die Zugriffsrechte von <b>Symfony/app/config/parameters.ini</b> stimmen werden die Datenbankrelationen automatisch von der web GUI aktualisiert.</p>
</section>
<section id="git">
<h1>Git einrichten</h1>
<p>Das <b>.gitignore</b> File muss noch angepasst werden bevor man es <a href="http://symfony.com/doc/current/cookbook/workflow/new_project_git.html">f&uuml;r Symfony verwenden</a> kann.</p>
<p>Ein fertiges .gitignore kannst du dir <a href="https://github.com/github/gitignore/blob/master/Symfony2.gitignore" >hier</a> oder <a href="https://github.com/symfony/symfony/blob/master/.gitignore" >hier</a> ziehen, ich nutze folgendes:</p>
<pre>
<span classs="p"># OS</span>
<span classs="p">*~</span>
<span classs="p">._*</span>
<span classs="p">.DS_Store</span>
<span classs="p">Thumbs.db</span>
<span classs="p"># IDEs</span>
<span classs="p">.project</span>
<span classs="p">.settings</span>
<span classs="p">.bundle</span>
<span classs="p">.buildpath</span>
<span classs="p">.build</span>
<span classs="p">.idea</span>
<span classs="p"># Symfony</span>
<span classs="p">db/*.sqlite3</span>
<span classs="p">log/*.log</span>
<span classs="p">tmp/**/*</span>
<span classs="p">env.sh</span>
<span classs="p">/web/bundles/</span>
<span classs="p">/app/bootstrap*</span>
<span classs="p">/app/cache/*</span>
<span classs="p">/app/logs/*</span>
<span classs="p">/vendor/</span>
<span classs="p">/app/config/parameters.ini</span>
</pre>
<p>Kopiere das File einfach in den <b>Symfony/</b> Ordner.</p>
<p>Danach kannst du das Git Repository anlegen.</p>
<pre>
<span>Symfony$ git init</span>
<span>Symfony$ git add .</span>
<span>Symfony$ git commit -m "starting new symfony project"</span>
</pre>
</section>
<section id="database">
<h1>Datenbank erstellen</h1>
<p>Erzeuge zu erst ein Datenbank File, dies sollte mühelos funktionieren wenn die <b>Symfony/app/config/parameters.ini</b> Datei stimmt.</p>
<code>Symfony$ php app/console doctrine:database:create</code>
<br>
<dl class="accordion">
<dt class="margintop20 info1 blue"><i class="icon-info-sign"></i> das funktioniert nicht !??</dt>
<dd class="marginleft20px info1">
<p>Falls du über die Symfony-Console aus irgend einem Grund die Datenbank nicht anlegen kannst, muss das schnell manuel erledigt werden.</p>
<pre class="marginleft20px">
mysql -u root -p
mysql> create database symfony;
mysql> exit;
sudo service mysql restart
</pre> </dd>
<p>Als nächstes generierst du ein <a href="http://symfony.com/doc/master/glossary.html#term-bundle">Bundle</a> in dem deine Aktivitäten statt finden sollen.
<br>Bundles sind quasi Module, die es ermöglichen Aufgaben die sich ständig wiederolen, wie eine API Connection zu Twitter, in eigene Bereiche auszulagern und später eventuell in einem anderen Symfony Projekt wieder zu verwenden.</p>
<p>Versuche <a href="http://symfony.com/doc/master/cookbook/bundles/best_practices.html">sprechende Namen</a> f&uuml;r die Bundles und deren Namespace in dem sie sich befinden zu benutzen.</p>
<p>Der Namespace k&ouml;nnte z.B. der Name der Firma sein f&uuml;r die du das Symfony Projekt erstellst, wie <b>Encom</b> oder <b>Cyberdyn</b>.</p>
<p>Der Bundlename s&ouml;llte die T&auml;tigkeit beschreiben die das Bundle ausf&uuml;hrt, wie <b>Encom/TwitterApiConnectorBundle</b> oder <b>Cyberdyn/UserManagementBundle</b>.</p>
<br>
<p>Erstellen wir doch mal ein Programm um Restaurants zu raten.</p>
<code>Symfony$ php app/console generate:bundle --namespace=YourCompany/RestaurantBundle</code><br>
<br>
<p>In meinem Beispiel gehen wir von folgender Datenbankstruktur aus:</p>
<ul class="db_list border"><b>Tabelle: Restaurant</b>
<li>- name</li>
<li>- startuptime</li>
<li>- description</li>
</ul>
<span class="db_list"><br>1 --- m</span>
<ul class="db_list border"><b>Tabelle: Rating</b>
<li>- restaurant_id</li>
<li>- date</li>
<li>- price</li>
<li>- delivertime</li>
</ul>
<div class="clearfix"></div>
<br>
<br>
<p id="entity">Die Klassen die die Tabellen abbilden sollen, müssen wir nicht von Hand schreiben. <br><a href="http://www.doctrine-project.org/projects/orm.html">Doctrine</a> kann das Gesamte <a href="http://de.wikipedia.org/wiki/Objektrelationale_Abbildung"> ORM</a> für uns mit einem Onliner erstellen:</p>
<pre class="highlight" id="trip_entity">
Symfony$ php app/console doctrine:generate:entity --entity=<span class="s1">"YourCompanyRestaurantBundle:Restaurant"</span> --fields=<span class="s1">"name:string(255) startuptime:time location:string(255) description:text"</span><br>
Symfony$ php app/console doctrine:generate:entity --entity=<span class="s1">"YourCompanyRestaurantBundle:Rating"</span> --fields=<span class="s1">"day:date rating:integer price:float delivertime:time"</span>
</pre>
<p>Doctrine hat uns jetzt alle nötigen Entitys im <b>Symfony/src/YourCompany/RestaurantBundle/Entity</b> Verzeichnis erstellt.</p>
<p>F&uuml;r Projekte die mehrere Interfaces besitzen sollen (iPhone, Web, API, whatever), bietet es sich an den Datenbankzugriffskram in ein eigens Bundle zu stecken, um Ihn im iPhone, Web und API Bundle nicht immer wieder neu definieren zu m&uuml;ssen.</p>
<p><i class="icon-info-sign"></i> Man kann auch das ORM von einer <a href="http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html"> bereits bestehenden Datenbank</a> erzeugen.</p>
</section>
<section id="relations">
<h2>Relations erstellen</h2>
<p>Als n&auml;chstes sagen wir Symfony wie es die Entitys zu einander in Relation bringen soll, in dem du die foreign Verbindungen im Entity selbst definierst.</p>
<p>Diese Notation nennt sich in Symfony <a href="http://de.wikipedia.org/wiki/Annotation_(Programmierung)">Annotations</a>.
Wir schreiben direkt &uuml;ber das Property auskommentiert welche Sonderstellung es haben soll.
In unserm Fall ist das eine <b>1 zu m</b> Beziehung.
Jedes Restaurant kann mehrere Ratings haben, jedes Rating kann nur zu einem Restaurant geh&ouml;ren.
Also <a href="http://nubyonrails.com/tools/pluralize">pluralisieren</a> wir den Namen des Propertys -> <b>$ratings</b>.</p>
<p>Erstelle die Relations in deiner neuen Entity Klasse nach folgendem Muster:</p>
<pre class="highlight" id="trip_relation">
<span class="sd">// Symfony/src/YourCompany/RestaurantBundle/Restaruant/Entity/<b>Restaurant</b>.php</span>
<span class="k">use</span> Doctrine\Common\Collections\ArrayCollection
<span class="k">class</span> Restaurant
{
.....
<span class="sd">/**
* @ORM\<b>OneToMany</b>(targetEntity="Rating", mappedBy="restaurant")
*/ </span>
<span class="k">protected</span> $ratings;
<span class="k">public function</span> __construct()
{
$this<span class="k">-></span>ratings <span class="k">= new</span> ArrayCollection();
}
}
</pre>
<p>Und das selbe umgekehrt in das Rating Entity was von Restaurant abh&auml;ngt:</p>
<pre class="highlight">
<span class="sd">// Symfony/src/YourCompany/RestaurantBundle/Restaruant/Entity/<b>Rating</b>.php
/**
* @ORM\<b>ManyToOne</b>(targetEntity="Restaurant", inversedBy="ratings")
* @ORM\JoinColumn(name="restaurant_id", referencedColumnName="id")
*/
</span>
<span class="k">protected</span> $restaurant;
</pre>
<p>Nach dem du die Relationen konfiguriert hast, musst du noch die Getter- und Settermethoden f&uuml;r alle Property Attribute erstellen.
Das k&ouml;nnen wir ebenfalls von Doctrine automatisch erledigen lassen.</p>
<code>Symfony$ php app/console doctrine:generate:entities YourCompany</code>
<p>Doctrine sucht jetzt in <b>allen Bundles</b> die sich in <b>Symfony/src/YourCompany</b> befinden, in deren <b>Entity/</b> Ordner, nimmt sich die PHP Klassen und generiert Setter- und Gettermethoden für deren Properties.</p>
<p>Jetzt schreiben wir dieses Schema noch in die Datenbank.</p>
<code>Symfony$ php app/console doctrine:schema:update --force</code>
<p>Und fertig.</p>
<code>Symfony$ git commit -a -m "DB relations are safe"</code>
</section>
<section id="templates">
<h1>Einfügen der Templates</h1>
<p>Kopiere alle Templates (Bootstrap CSS und JQuery Javascript Zeug) in <b>/Symfony/src/YourCompany/RestaurantBundle/Recources/public</b> und erstelle die Symlinks im <b>/web</b> Verzeichnis.</p>
<code>Symfony$ php app/console assets:install --symlink web</code>
<p>Die Symlinks erscheinen dann im <b>Symfony/web/bundles/yourcompanyrestaurant</b> Ordner. Der <b>/web</b> Ordner ist als einziger &uuml;ber den Webserver zu ereichen.</p>
<p>Als n&auml;chstes sagen wir Symfony wo f&uuml;r alle Bundles die Stylesheets und Javascripts zu finden sind.
<br>Dies tust du mit folgender <a href="http://twig.sensiolabs.org/doc/templates.html">Twig Syntax</a> in dieser Datei <b>Symfony/app/Resources/view/base.html.twig</b></p>
<pre class="highlight" id="trip_templates">
{% <span class="k">stylesheets</span> <span class="s1">'@YourcompanyRestaurantBundle/Resources/public/stylesheets/*.css'</span> %}
<<span class="c1">link</span> rel=<span class="s1">"stylesheet"</span> type=<span class="s1">"text/css"</span> href=<span class="s1">"{{ asset_url }}"</span >>
{% <span class="k">endstylesheets</span> %}
{% <span class="k">javascripts</span> <span class="s1">'@YourcompanyRestaurantBundle/Resources/public/javascripts/*.js'</span> %}
<<span class="c1">script</span> src=<span class="s1">"{{ asset_url }}"</span><<span class="c1">/script</span>>
{% <span class="k">endjavascripts</span> %}
</pre>
<dl class="accordion">
<dt class="margintop20 info2 blue">
<p><i class="icon-info-sign"></i>
Achtung! Die inkludierten Dateien werden so alphabetisch von Symfony eingefügt</p>
</dt>
<dd class="marginleft20px info2">Das kann zu <b>Problemen</b> führen wenn man <b>eigene</b> Javascript oder CSS <b>Dateien verwendet</b>, die z.B Bootstrap CSS Klassen überschreiben, oder JQuery Funktionen aufrufen. In diesem Fall müsste man per Hand die Includes so sortieren das sie in der richtigen Reihenfolge geladen werden.</dd>
</dl>
<p>Und fertig.</p>
<code>Symfony$ git commit -a -m "assatics are safe"</code>
<br>
<br>
<p>Bilder können jetzt einfach über die <b>asset()</b> Funktion von Twig nach folgendem Schema eingebunden werden.</p>
<code class="highlight">
<<span class="c1">img</span> src=<span class="s1">"{{ asset('bundles/YourcompanyRestaurant/images/logo.png') }}"</span> />
</code>
<h5 class="margintop20"><i class="icon-info-sign"></i> CSS background-image Bug</h5>
<p class="marginleft20px">Background-images in CSS k&oumlnnen nicht &uuml;ber die @Bundlename Notation aufgerufen werden.
<br>Behelfsm&auml;ssig funktioniert aber der relative Pfad.</p>
<code class="highlight marginleft20px"><span class="k">background-image</span>: url(<span class="s1">"../../bundles/YourcompanyRestaurant/img/logo.png"</span>);</code>
<br><br>
<p>Bei Projekten die mehrere Interfaces haben w&uuml;rde es Sinn machen ein <b>LayoutBundle</b> zu erstellen was nur f&uuml;r das Layout zust&auml;ndig ist.</p>
<br>
<p><b>Super hab ich, und was jetzt?</b> <a href="index_de_2.html" id="trip_seite_2"> Seite 2 -></a></p>
</section>
</div>
</div>
</div>
<div class="row-fluid">
<footer class="footer">
</footer>
</div>
</div>
<div class="phonenav navbar-fixed-bottom">
<div class="breath">
<a class="phonebutton" href="https://github.com/peponi/Symfony-for-absolute-beginners">Github</a>
| <a href="index_de_2.html" class="phonebutton"> Seite 2 -></a>
<span class="phonebutton" id="phonenavigation">Navigation</span>
</div>
</div>
</body>
</html>