Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Branch: master
Fetching contributors…

Cannot retrieve contributors at this time

398 lines (367 sloc) 23.305 kB
<!DOCTYPE html>
<html lang="en">
<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 pour débutants</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/app.css">
<script src="http://code.jquery.com/jquery-latest.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">Langue</a>
<ul class="nav">
<li><a href="index.html">Deutsch</a></li>
<li><a href="index_en.html">English</a></li>
<li><a href="index_fr.html">Fran&#231;ais</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>
<ul class="nav nav-list bs-docs-sidenav ">
<li><a href="#download"> 1. Télécharger Symfony</a></li>
<li><a href="#ubuntu"> - Installation sous Ubuntu</a></li>
<li><a href="#osx"> - Installation sous OS X</a></li>
<li><a href="#windows"> - Installation sous Windows</a></li>
<li><a href="#configuration"> 2. Configuration de Symfony</a></li>
<li><a href="#git"> 3. Ne pas oublier Git</a></li>
<li><a href="#database"> 4. Constituer une base de données</a></li>
<li><a href="#relations"> - relations</a></li>
<li><a href="#templates"> 5. Intégrer des trames</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>Téléchargement de <span class="Symfony2">Symfony 2</span></h1>
<p>Pour commencer télécharge la version standarde avec tous les vendors et décompacte-les.</p>
<a href="http://symfony.com/download">Download ></a>
<br><br>
<p>Qui veut se passer de l'installation et la configuration de Symfony et qui veut commencer directement avec <a href="#database">ORM Design </a> peut autrement télécharger une VM prête <a href="http://de.wikipedia.org/wiki/Virtuelle_Maschine"></a> </p>
<dl class="accordion">
<dt class="virtualbox"><i class="icon-info-sign"></i> VirtualBox Image</dt>
<dd class="virtualbox">
<p><a href="https://de.wikipedia.org/wiki/Virtualbox">VirtualBox</a> est vite et aisément <a href="http://VirtualBoxImages.com/GettingStarted">installé</a>. L'avantage est que je ne dois pas chaque fois répéter les points 1 à 4 si je veux commencer avec un nouveau projet Symfony, là je peux recommencer directement. En outre j'ai une couverture de rollback additionnelle à celle de Git.</p>
<p>Télécharge le fichier d'installation pour <a href="https://www.virtualbox.org/wiki/Downloads">OS X et Windows </a>et installe-la, ou pour ubuntu simplement:</p>
<code>sudo apt-get install virtualbox-4.1</code>
<p>Ensuite télécharge l'Image du VirtuelBox directement ou via Torrent. Double-clic dessus et la VM va s'installer soi-même.</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>La machine virtuelle est pour le moment en modus de réseau d'ordinateur, cela veut dire que le serveur ubuntu reçoit l'adresse de ton serveur DHCP. </p>
<dl class="accordion">
<dt class="nat"><i class="icon-info-sign"></i> Si la machine ne serait pas joignable de l'extérieur tu peux le changer sur NAT.</dt>
<dd class="nat">
<img class="picture maxwidth600" src="http://media.cdn.ubuntu-de.org/wiki/attachments/39/03/Bildschirmfoto_am_2012-01-18_220315.png">
<p>Maintenant toutes les services ne sont joignable que sur le serveur ubuntu par localhost et par les ports que tu as attribués.</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 est joignable par les services suivantes:</h5>
<ul class="nonstyletype">
<li>SSH - ssh://ubuntu@IPADRESS/var/www/Symfony</li>
<li>FTP - ftp://ubuntu@IPADRESS/var/www/Symfony</li>
<li>SMB - smb://ubuntu@IPADRESS</li>
<li>Git - git add remote virtualbox ssh://ubuntu@IPADRESS/var/www/Symfony</li>
</ul>
<dl class="accordion">
<dt class="connection"><i class="icon-info-sign"></i> Comment puis-je me connecter avec le serveur?</dt>
<dd class="connection">
<p>Sous ubuntu siplement avec <b>Ctrl+l</b> taper l'adresse ci-dessus</p>
<div class="picture maxwidth600 pic2 border"></div>
<p>Sous Mac OS X avec <b>Apfel+k</b> taper l'adresse ci-dessus</p>
<div class="picture maxwidth600 pic3"></div>
<div class="picture maxwidth600 pic4"></div>
<p>Si tu utilise <b>Aptana Studio 3</b> ou <b>Eclipse</b> tu peux ajouter le dossier symfony directement par le Samba Share comme projet. </p>
<p>clic <b>File - import...</b></p>
<div class="picture maxwidth600 pic5 border"></div>
<ul class="nonstyletype">Dans <li>Ubuntu<b>/home/Username/.gvfs/</b></li>le Samba Share se trouve sous le lien. Dans <li>Mac OS X sous - <b>/Volumes/Symfony/</b></li>
</ul>
<br>
<p>Ou utiliser la fonction FTP publishing. Just un clic droit sur ton projet (vide) puis <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> Comment puis-je atteindre la base de données MySQL de dehors?</dt>
<dd class="mysql">
<p>Si tu veux te connecter au serveur avec MySQL Workbench ou un autre Tool, tu dois d'abord <a href="https://support.nbiserv.de/index.php?/Knowledgebase/Article/View/73/0/wie-kann-ich-meinen-mysql-server-von-extern-erreichbar-machen"> le configurer</a>. <br>Pour commencer connecte toi par SSH sur le serveur:</p>
<code>ssh ubuntu@192.168.xx.xx</code>
<p>Puis appelle le MySQL fichier de configuration </p>
<code>sudo vim /etc/mysql/my.cnf</code>
<p>et commente les deux lignes suivantes.</p>
<pre class="highlight">
[...]
#bind-address = 127.0.0.1
#skip-networking
[...]
</pre>
<p>Maintenant tu dois encore déverrouiller un utilisateur MySQL <a href="http://svenkalinowski.de/linux-wiki/MySql#head-f4b336b581a6f8fb2acecaae6a983fc27b9f2df3"> d'extérieure</a>.</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>et redémarrer.</p>
<code>sudo service mysql restart</code>
<p>Fini.</p>
</dd>
</dl>
</dd>
</dl>
</section>
<section id="ubuntu">
<h2>Installation sous Ubuntu 12.04</h2>
<p>Pour assumer <a href="http://symfony.com/doc/current/reference/requirements.html">les exigences</a> de Symfony il est conseillé de vite télécharger le LAMP Stack.</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>Si vous ne trouvez pas <b>lamp-server</b> par les Repositoires standard, vous devez installer et configurer MySQL et Apache Server vous-même.</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>La méthode la plus simple serait de ainsi configurer <a href="http://wiki.ubuntuusers.de/Apache#Benutzerspezifisch">Apache </a> que c'est possible d' avoir accès au répertoire domestique pour qu'on puisse mettre le code dans <b>ton répertoire domestique</b> sous <b>tes droits d'usager</b>.</p>
<p>Qui aimerait utiliser Symfony dans <b>/var/www</b> doit s'occuper des droits d'accès <a href="http://symfony.com/doc/current/book/installation.html#configuration-and-setup"> Nous ajoutons <b>le nom d'usager</b> du groupe <b>www-data</b> et nous nous nommons titulaire du dossier symfony, pour que nous ayons droit d'écriture dans ce répertoire avec notre environnement de développement </a>. </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>Si cela est fait tu peux contrôler
<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> si toutes les exigences pour le fonctionnement de Symfony sont accomplies.</p>
<b>Qui aimerait exécuter Symfony sur un service Hosting,</b>
<ul>
<li>
<p style="line-height: 1.7;">dois ajouter dans <b>Symfony/web/config.php</b> et <b>Symfony/web/app_dev.php</b> sa <a href="http://www.whatsmyip.org/">propre IP adresse externe </a> avec l'instruction <code style="padding:4px">if (!in_array(@$_SERVER['REMOTE_ADDR'], array( ...</code>.</p>
</li>
<li>
<p>éventuellement nous ne pouvons pas écrire dans la <b>php.ini</b> pour déclencher <b>short_open_tag</b>. Dans ce cas il faut aménager un <b>.htacces</b> fichier dans le dossier Symfony dans laquelle nous écrivons <b>php_value short_open_tag off</b>.</p>
<code>echo "php_value short_open_tag off" > .htaccess </code>
</li>
</ul>
</section>
<section id="osx">
<h2>Installation sous OS X</h2>
</section>
<section id="windows">
<h2>Installation sous Windows</h2>
</section>
<section id="configuration">
<h1>Configuration de Symfony 2</h1>
<p></p>
<p>Si Apache marche correctement il est possible d'accéder l'URL et configurer l'accès à la base de données de Synfony.</p>
<a>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>Si les droit d'accès dans <b>Symfony/app/config/parameters.ini</b> sont corrects, les relations de la base de données seront automatiquement actualisés de la web GUI.</p>
</section>
<section id="git">
<h1>Installer Git </h1>
<p>Le fichier <b>.gitignore</b> doit être adapté <a href="http://symfony.com/doc/current/cookbook/workflow/new_project_git.html">avant de pouvoir utiliser Symfony</a>.</p>
<p>Tu peux télécharger le .gitignore <a href="https://github.com/github/gitignore/blob/master/Symfony2.gitignore" >là</a> et <a href="https://github.com/symfony/symfony/blob/master/.gitignore" >là</a>, moi j' utilise le suivant:</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>Copie le fichier dans le dossier <b>/Symfony</b>.</p>
<p>Puis le Git répertoire peut être installé.</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>Installer une base de données</h1>
<p>Génères d'abord un fichier de base de données, cela devrait fonctionner sans problème si le fichier <b>Symfony/app/config/parameters.ini</b> est correct.</p>
<code>Symfony$ php app/console doctrine:database:create</code>
<br>
<p>Puis génères un <a href="http://symfony.com/doc/master/glossary.html#term-bundle">Bundle</a> dans lequel tes activités devraient s'opérer.
<br>Les bundles sont quasi des modules qui permettent que des tâches, qui se répètent constamment, comme une connection API vers Twitter, sont délocalisés dans des propres domaines et de les réutiliser eventuellement plus tard dans un autre projet Symfony. </p>
<p>Essais <a href="http://symfony.com/doc/master/cookbook/bundles/best_practices.html">des noms parlant </a> pour utiliser les bundles et leur espace de nom où ils se trouvent.</p>
<p>L'espace de nom pourrait être par exemple le nom d' entreprise pour laquelle le projet Symfony est effectué, comme <b>Encom</b> ou <b>Cyberdyn</b>.</p>
<p>Le nom du bundle devrait décrire l' activité exécuté par le bundle, comme <b>Encom/TwitterApiConnectorBundle</b> ou <b>Cyberdyn/UserManagementBundle</b>.</p>
<br>
<p>Laisse-nous réaliser encore une fois un programme pour évaluer des restaurants.</p>
<code>Symfony$ php app/console generate:bundle --namespace=YourCompany/RestaurantBundle</code><br>
<br>
<p>Dans mon exemple nous partons d'une structure de base de données suivante: </p>
<ul class="db_list border"><b>Tableau: Restaurant</b>
<li>- nom</li>
<li>- date d'ouverture</li>
<li>- description</li>
</ul>
<span class="db_list"><br>1 --- m</span>
<ul class="db_list border"><b>Tableau: Rating</b>
<li>- restaurant_id</li>
<li>- date</li>
<li>- prix</li>
<li>- délais de livraison</li>
</ul>
<div class="clearfix"></div>
<br>
<br>
<p id="entity">Il ne faut pas écrire manuel les classes, qui doivent reproduire les tableaux. <br><ahref="http://www.doctrine-project.org/projects/orm.html">Doctrine</a> peut exécuter le tout <a href="http://fr.wikipedia.org/wiki/Mapping_objet-relationnel"> ORM</a> pour nous avec un onliner:</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 nous a exécuté toutes les entités nécessaires dans <b>Symfony/src/YourCompany/RestaurantBundle/Entity</b> Répertoire exécuté.</p>
<p>Pour des projets qui devraient posséder plusieurs interfaces (iPhone,Web,API,etc.), il s'impose de ranger les documents d'accès de base de données dans un propre bundle, de sorte qu'il ne soit pas nécessaire de devoir toujours le redéfinir dans iPhone,Web et API.</p>
<p><i class="icon-info-sign"></i> C'est aussi possible de reproduire le ORM d'une <a href="http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html"> base de données existant</a>.</p>
</section>
<section id="relations">
<h2>Installer des relations </h2>
<p>Ensuite nous disons à Symfony comment relier les différents entités par définir les connexions etrangers dans l'entité sois-même. </p>
<p>Cette notation se nomme Symfony <a href="http://fr.wikipedia.org/wiki/Annotation_(informatique)">Annotations</a>.
Nous écrivons de la propriété, commentée en détail, quelle exception celle-là devrait avoir. Dans notre cas c'est une relation <b>de 1 à m</b> .
Chaque restaurant peut avoir plusieurs évaluations, toute évaluation peut appartenir qu' à un seul restaurant.
Alors <a href="http://nubyonrails.com/tools/pluralize">nous réproduisons</a> le nom de la propertys -> <b>$ratings</b>.</p>
<p>Réalise les relations dans ta nouvelle classe d'entité par le modèle suivant: </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>Et vice versa en ce qui concerne la Rating Entity dépendant du Restaurant:</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>Après avoir configuré les relations, tu dois réaliser les méthodes Getter- et Setter pour toutes les attribut de propertys.
Cela nous pouvons aussi laisser exécuter automatiquement par Doctrine.</p>
<code>Symfony$ php app/console doctrine:generate:entities YourCompany</code>
<p>Maintenant nous écrivons ce schéma dans la base de données.</p>
<code>Symfony$ php app/console doctrine:schema:update --force</code>
<p>Et fini.</p>
<code>Symfony$ git commit -a -m "DB relations are safe"</code>
</section>
<section id="templates">
<h1>Installer des trames</h1>
<p>Copier toutes les trames (Bootstrap CSS und JQuery Javascript Zeug) dans <b>/Symfony/src/YourCompany/RestaurantBundle/Resources/public</b> et réalise les liens du Sym dans le <b>/web</b> répertoire.</p>
<code>Symfony$ php app/console assets:install --symlink web</code>
<p>Puis les liens de Sym apparaissent dans le <b>Symfony/web/bundles/yourcompanyrestaurant</b> Dossier. Le <b>/web</b> Dossier est le seul à être joignable par le server web.</p>
<p>Par la suite nous disons à Symfony où il trouve les bundles de Stylesheets et de Javascripts.
<br>Cela tu vas exécuter avec le suivant <a href="http://twig.sensiolabs.org/doc/templates.html">Twig Syntax</a> dans ce fichier <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>
Attention! Les fichiers inclus sont insérés par Synfony en ordre alphabétique </p>
</dt>
<dd class="marginleft20px info2">Cela peut causer des <b>problèmes</b> si des <b>propres</b> Javascript ou CSS <b>fichiers sont utilisés</b>, qui par exemple érasent les classes de Bootstrap CSS, ou appellent les fonctions JQuery. Dans ce cas il faudrait assortir manuellement les Includes de manière qu'ils sont chargé dans l'ordre correct.</dd>
</dl>
<p>Et fini.</p>
<code>Symfony$ git commit -a -m "assatics are safe"</code>
<br>
<br>
<p>Les images peuvent êtres intégrés par la fonction <b>asset()</b> de Twig par le schéma suivant.</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 dans CSS ne peuvent pas être appelé par la notation @Bundlename.
<br>Le chemin relatif fonctionne par commande.</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>Dans des projets qui ont plusieurs Interfaces il serait raisonnable de réaliser un <b>LayoutBundle</b> qui est rersponsable pour le Layout.</p>
<br>
<p><b>Parfait c'est fait, est puis?</b> <a href="index_de_2.html" id="trip_seite_2"> page 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"> page 2 -></a>
<span class="phonebutton" id="phonenavigation">navigation</span>
</div>
</div>
</body>
</html>
Jump to Line
Something went wrong with that request. Please try again.