Symfony2 est un framework de développement Web basé sur le langage PHP, qui présente les caractéristiques d'une vitesse de développement rapide et de hautes performances. Cet article décrit en détail la configuration et le développement du programme du framework Symfony2 à travers le processus d'implémentation d'un exemple de programme.
Je prends le système Ubuntu comme exemple, en utilisant le package de compression .tgz, décompressez le fichier source dans le répertoire /var/www et exécutez :
tar zxvf Symfony_Standard_Vendors_2.0.###.tgz -C /var/www
Le ci-dessus ### fait référence au numéro de version Lorsque je l'ai téléchargé, il s'agissait de BETA5.
Après décompression, le répertoire de Symfony2 est le suivant :
/var/www/ <- Web根目录 Symfony/ <- Symfony2解压目录 app/ <- 存放symfony的核心文件的目录 cache/ <- 存放缓存文件的目录 config/ <- 存放应用程序全局配置的目录 logs/ <- 存放日志的目录 src/ <- 应用程序源代码 ... vendor/ <- 供应商或第三方的模组和插件 ... web/ <- Web入口 app.php <- 生产环境下的前端控制器 ...
Si vous devez l'installer (si vous avez téléchargé le sans version fournisseur) Ou lors de la mise à jour du contenu du fournisseur (tiers), vous pouvez utiliser :
cd /var/www/Symfony php bin/vendors install
2. Configuration
La configuration de Symfony2 est très simple, il vous suffit de saisir dans le navigateur :
http://localhost/Symfony/web/config.php
puis de suivre les instructions. Ce qui est à noter, c'est le problème d'autorisation des répertoires app/cache et app/logs Depuis que je l'ai installé sous Ubuntu, je peux l'utiliser (firehare est mon nom d'utilisateur, vous pouvez le remplacer par votre nom d'utilisateur ici) :
#为了保险起见 rm -rf app/cache/* rm -rf app/logs/* #设置ACL sudo setfacl -R -m u:www-data:rwx -m u:firehare:rwx app/cache app/logs sudo setfacl -dR -m u:www-data:rwx -m u:firehare:rwx app/cache app/logs
Si le système ne prend pas en charge la commande setfacl, il y a deux endroits pour vérifier :
Si setfacl a été installé, sinon, vous pouvez utilisez l'installation de la commande suivante (elle semble être installée par défaut dans Ubuntu 11.10, le package s'appelle acl) :
sudo apt-get install setfacl
Si setfacl a été installé , veuillez vérifier le fichier /etc/fstab pour voir si l'option acl a été ajoutée :
# /var was on /dev/sda7 during installation UUID=c2cc4104-b421-479a-b21a-1108f8895110 /var ext4 defaults,acl 0 2
Remplissez ensuite le nom de la base de données et d'autres informations selon la page vous invite, puis copiez les informations. Accédez au fichier /var/www/Symfony/app/config/parameters.ini comme suit :
; These parameters can be imported into other config files ; by enclosing the key with % (like %database_user%) ; Comments start with ';', as in php.ini [parameters] database_driver="pdo_mysql" database_host="localhost" database_name="symfony" database_user="symfony" database_password="symfony" mailer_transport="smtp" mailer_host="localhost" mailer_user="" mailer_password="" locale="zh_CN" secret="29f96e9e70c2797cb77dd088d3954d3c38d9b33f"
Si tout va bien, lorsque vous saisirez l'adresse suivante dans votre navigateur, vous obtiendrez une page de démonstration :
http://localhost/Symfony/web/app_dev.php
3. Programme exemple :
1. Créer un bundle :
Créez d'abord un bundle :
php app/console gen:bundle "AcmeHelloBundle" src 为了确保Acme名称空间可以被自动加载,请在你的app/autoload.php文件添加下列语句: $loader->registerNamespaces(array( // ... //添加自定义的名称空间 'Acme' => __DIR__.'/../src', // ... )); 最后是将该Bundle注册到Symfony2中,请在你的app/AppKernel.php文件中添加下列语句: // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new AcmeHelloBundleAcmeHelloBundle(), ); // ... return $bundles; }
2. Créer un itinéraire
Le routage peut être créé dans app/config/routing.yml, mais afin d'avoir de bonnes habitudes de programmation et une bonne organisation du code, vous pouvez le placer dans Resources/config/routing.yml dans le répertoire Bundle créé, et dans app/config/routing. Seule la référence au fichier de routage est conservée dans le yml, comme indiqué ci-dessous :
# app/config/routing.yml homepage: pattern: / defaults: { _controller: FrameworkBundle:Default:index } hello: resource: "@AcmeHelloBundle/Resources/config/routing.yml"
La vraie route est écrite en src/Acme/HelloBundle/Resources /config/routing.yml fichier de routage, comme suit :
# src/Acme/HelloBundle/Resources/config/routing.yml hello: pattern: /hello/{name} defaults: { _controller: AcmeHelloBundle:Hello:index, name:'pu' }
3. Créez un contrôleur :
Contrôleur Le nom doit être HelloController.php. La raison est très simple, car votre routage a déjà donné le nom du contrôleur. Les contrôleurs des lignes 4 et 7 du fichier de routage ci-dessus commencent tous les deux par AcmeHelloBundle:Hello. AcmeHelloBundle représente le nom du Bundle et Hello représente le nom du contrôleur, le contrôleur doit donc être HelloController.php et l'extension du nom du contrôleur est la convention de dénomination. Quant à l'index et au disons suivants, ce sont des méthodes de la classe contrôleur. La méthode d'index est définie ci-dessous. Bien entendu, le nom de la méthode indexAction est également une convention de dénomination :
// src/Acme/HelloBundle/Controller/HelloController.php namespace AcmeHelloBundleController; use SymfonyComponentHttpFoundationResponse; class HelloController { public function indexAction($name) { return new Response('<html><body>Hello '.$name.'!</body></html>'); } }
De cette façon, lorsque nous entrons dans le navigateur
http://localhost/hello/index/Worldaffichera les mots Hello World !. 4. Créez un modèle : Afin de réutiliser les blocs dans le fichier de mise en page, vous pouvez utiliser des modèles pour remplacer les instructions HTML dans le contrôleur. Créez d'abord un fichier de mise en page :
{# app/Resources/views/layout.html.twig #} <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{% block title %}Hello Application{% endblock %}</title> </head> <body> {% block body %}{% endblock %} </body> </html>Notez que ce fichier se trouve dans le répertoire app/Resources/views/ et que sa portée est le modèle global pour l'ensemble du dossier de candidature. Deux blocs sont définis dans ce fichier : titre et corps. L'étape suivante consiste à créer un modèle spécifiquement pour le contrôleur Hello, comme indiqué ci-dessous :
{# src/Acme/HelloBundle/Resources/views/Hello/index.html.twig #} {% extends '::layout.html.twig' %} {% block body %} Hello {{ name }}! {% endblock %}Dans ce fichier, il hérite du modèle global, et Le corps du bloc est défini, ce qui remplace le bloc corps dans le modèle global. Si le système restitue ce modèle, il écrasera le corps de bloc du modèle global par le corps de bloc, puis le restituera.
Enfin, modifiez l'instruction HTML dans le contrôleur pour afficher le modèle ci-dessus :
// src/Acme/HelloBundle/Controller/HelloController.php namespace AcmeHelloBundleController; use SymfonyBundleFrameworkBundleControllerController; class HelloController extends Controller { public function indexAction($name) { return $this->render('AcmeHelloBundle:Hello:index.html.twig', array('name' => $name)); } }Framework PHP plus hautes performances Introduction classique Symfony2 Pour le tutoriel -articles liés, veuillez faire attention au site Web PHP chinois !