Créez votre première page Symfony


Créer une nouvelle page - que ce soit avec une sortie HTML ou JSON - est une simple opération "en deux étapes" :

  1. #🎜🎜 #

    Créer un itinéraire  : Un itinéraire est une URL de page qui pointe vers vous (comme # 🎜🎜#/about), lors du mappage à un contrôleur. /about),同时映射到一个控制器。

  2. 创建一个控制器:控制器(controller)是你为了构造页面而写的功能。你要拿到发送来的请求请求信息,用它创建一个Symfony的Response对象,令其包含HTML内容,JSON字符串或是其他

如同在网上每一次互动都是从HTTP请求开始,你的任务单纯而简单:理解请求,返回回复。

创建一个页面:路由和控制器 

在开始之前,确保你已经阅读了安装和配置Symfony章节,同时已经可以访问浏览器中的Symfony程序。

假设你要新建一个/lucky/number页面,用于生成一个随机的幸运数字并且输出它。那么,要先创建一个类并添加方法,用于在某人访问/lucky/number时被执行:

// src/AppBundle/Controller/LuckyController.phpnamespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;use Symfony\Component\HttpFoundation\Response; class LuckyController{
    /**
     * @Route("/lucky/number")
     */
    public function numberAction()
    {
        $number = rand(0, 100);         return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }}


在开始之前测试一下

http:// localhost:8000 / lucky / number

如果你在Apache或Nginx上正确设置了虚拟主机,就可以把http://localhost:8000部分替换为你自己的主机名,比如http://symfony.dev/app_dev.php/lucky/number

Créer une manette #🎜🎜##🎜🎜##🎜 🎜 ##🎜🎜##🎜🎜# : Le contrôleur est une fonction que vous écrivez pour construire une page. Vous devez recevoir les informations de la demande envoyées et les utiliser pour créer un objet Symfony #🎜🎜##🎜🎜#Response#🎜🎜##🎜🎜#, afin qu'il contienne du contenu HTML et JSON. String ou autre #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜# Tout comme toute interaction sur Internet commence par une requête HTTP, Votre tâche est pure et simple : comprendre la demande et renvoyer une réponse. #🎜🎜##🎜🎜##🎜🎜#

#🎜🎜##🎜🎜# Créer une page : routes et contrôleurs #🎜🎜##🎜🎜##🎜🎜##🎜🎜#¶#🎜🎜##🎜🎜#

#🎜🎜##🎜🎜##🎜🎜#Avant de commencer, assurez-vous d'avoir lu #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Installer et configurer Symfony# 🎜 🎜##🎜🎜##🎜🎜##🎜🎜# chapitre, et vous pouvez déjà accéder au programme Symfony dans le navigateur. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Supposons que vous souhaitiez créer un nouveau #🎜🎜##🎜🎜# /lucky La page /number#🎜🎜##🎜🎜# est utilisée pour générer un numéro porte-bonheur aléatoire et l'afficher. Alors, créez d'abord une classe et ajoutez une méthode à exécuter lorsque quelqu'un visite #🎜🎜##🎜🎜#/lucky/number#🎜🎜##🎜🎜# : #🎜 🎜##🎜 🎜##🎜🎜#
  // src/AppBundle/Controller/LuckyController.php // ...class LuckyController{
    // ...     /**
     * @Route("/api/lucky/number")
     */
    public function apiNumberAction()
    {
        $data = array(
            'lucky_number' => rand(0, 100),
        );         return new Response(
            json_encode($data),
            200,
            array('Content-Type' => 'application/json')
        );
    }}
#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜## 🎜🎜 #testit avant de commencer#🎜 🎜##🎜🎜##🎜🎜#
#🎜🎜##🎜🎜##🎜🎜#http://localhost:8000/lucky/number#🎜🎜##🎜 🎜##🎜🎜#
#🎜🎜##🎜🎜##🎜🎜#Si vous êtes #🎜🎜##🎜🎜# #🎜🎜##🎜🎜#Apache ou Nginx#🎜🎜##🎜🎜##🎜🎜##🎜🎜# Après avoir correctement configuré l'hôte virtuel, vous pouvez mettre #🎜🎜## Remplacer le 🎜🎜#http://localhost:8000#🎜🎜##🎜🎜# avec votre propre nom d'hôte, tel que #🎜🎜##🎜🎜#http:// symfony.dev/app_dev.php/ chanceux/numéro#🎜🎜##🎜🎜#. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#

Si vous voyez un numéro porte-bonheur sortir, alors félicitations ! Mais avant de jouer au loto, vous devez d’abord comprendre son fonctionnement.

numberActionnumberAction上面@Route被称为注释,它定义了URL匹配。你也可以在YAML(或其他格式)里写路由:请参考路由章节。实际上,文档中的多数路由例程都有“标签”,以显示每种格式的配置

注释下面的方法 - numberAction- 被称为控制器,这是你控制页面的地方。这个唯一的原则是:一个控制器必须返回一个Symfony的响应对象(你最终将学习到活用这个原则)。

创建一个JSON响应 

在控制器中返回的Response对象可以包含HTML,JSON甚至二进制文件比如图片或PDF。你可以轻松设置HTTP头信息或HTTP状态码。

假设你要创建一个JSON返回值,则只需要LuckyController再添加一个方法:

// src/AppBundle/Controller/LuckyController.php // ...// --> don't forget this new use statement 别忘了这行新的use声明use Symfony\Component\HttpFoundation\JsonResponse; class LuckyController{
    // ...     /**
     * @Route("/api/lucky/number")
     */
    public function apiNumberAction()
    {
        $data = array(
            'lucky_number' => rand(0, 100),
        );         // calls json_encode and sets the Content-Type header
        // 自动调用json_encode并设置Content-Type头
        return new JsonResponse($data);
    }}

   

在浏览器中测一下

http:// localhost:8000 / api / lucky / number

你更可将代码精简为超好用的JsonResponse

注释:// src/AppBundle/Controller/LuckyController.php // ...class LuckyController{
    /**
     * @Route("/lucky/number/{count}")
     */
    public function numberAction()
    {
        // ...
    }     // ...}


动态URL匹配:/ lucky / number / {count} 

窝,你做得不错但Symfony的路由还可以做得更多假设你希望用户可以到/lucky/number/5来立即生成幸运数字5,更新路由,在使其拥有尾部一个{wildcard}above 's # 🎜🎜#@Route

#🎜🎜# s'appelle #🎜🎜##🎜🎜##🎜🎜##🎜🎜#note#🎜🎜 ##🎜🎜##🎜🎜##🎜🎜#, qui définit la correspondance d'URL. Vous pouvez également écrire des itinéraires en YAML (ou autres formats) : merci de vous référer au chapitre . En fait, la plupart des routines de routage dans la documentation ont des "étiquettes" pour afficher la configuration pour chaque format #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜# commentaire ci-dessous La méthode - # 🎜🎜##🎜🎜#numberAction#🎜🎜##🎜🎜# - s'appelle le contrôleur, c'est ici que vous contrôlez la page. Le seul principe est : un contrôleur #🎜🎜##🎜🎜##🎜🎜##🎜🎜# doit #🎜🎜##🎜🎜##🎜🎜##🎜🎜# Return A Symfony #🎜🎜##🎜🎜##🎜🎜##🎜🎜# réponse #🎜🎜##🎜🎜##🎜🎜##🎜🎜# objet (vous finirez par apprendre à utiliser ce principe). Créez une réponse JSON 🎜##🎜🎜##🎜🎜##🎜🎜#L'objet #🎜🎜##🎜🎜#Response#🎜🎜##🎜🎜# renvoyé dans le contrôleur peut contenir des fichiers HTML, JSON et même binaires tels que des images ou des PDF. Vous pouvez facilement définir les informations d'en-tête HTTP ou le code d'état HTTP. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜# En supposant que vous souhaitiez créer une valeur de retour JSON, vous n'avez besoin que de #🎜🎜##🎜🎜#LuckyController< /code>#🎜🎜##🎜🎜#Ajouter une autre méthode : #🎜🎜##🎜🎜##🎜🎜#
YAML:# app/config/routing.ymllucky_number:
    path:     /lucky/number/{count}
    defaults: { _controller: AppBundle:Lucky:number }
#🎜🎜#
#🎜🎜##🎜🎜##🎜🎜##🎜 🎜#Test dans le navigateur#🎜🎜##🎜🎜##🎜🎜#
#🎜🎜##🎜🎜##🎜🎜#http://localhost:8000/api/lucky/number#🎜 🎜## 🎜🎜##🎜🎜#
#🎜🎜##🎜🎜##🎜🎜#Vous pouvez également rationaliser le code en un #🎜🎜##🎜🎜#JsonResponse< /code>#🎜🎜##🎜🎜#:#🎜🎜##🎜🎜##🎜🎜#
XML:<!-- app/config/routing.xml --><?xml version="1.0" encoding="UTF-8" ?><routes xmlns="http://symfony.com/schema/routing"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://symfony.com/schema/routing        http://symfony.com/schema/routing/routing-1.0.xsd">     <route id="lucky_number" path="/lucky/number/{count}">
        <default key="_controller">AppBundle:Lucky:number</default>
    </route></routes>
#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#
# 🎜🎜#

#🎜🎜##🎜🎜#Correspondance d'URL dynamique : /lucky/number/{count} #🎜🎜##🎜🎜##🎜🎜##🎜🎜#¶#🎜🎜##🎜🎜#

#🎜🎜##🎜🎜##🎜🎜#Wo, tu as fait du bon travail mais le routage de Symfony Vous pouvez faire plus. Supposons que vous souhaitiez que les utilisateurs accèdent à #🎜🎜##🎜🎜# ! #🎜🎜##🎜🎜#/lucky/number/5#🎜🎜##🎜🎜# pour générer immédiatement le chiffre porte-bonheur 5, mettre à jour l'itinéraire et lui donner une queue #🎜🎜 ## 🎜🎜#{wildcard}#🎜🎜##🎜🎜#Carte générique : #🎜🎜##🎜🎜##🎜🎜#
PHP:// app/config/routing.phpuse Symfony\Component\Routing\RouteCollection;use Symfony\Component\Routing\Route; $collection = new RouteCollection();$collection->add('lucky_number', new Route('/lucky/number/{count}', array(
    '_controller' => 'AppBundle:Lucky:number',))); return $collection;
// src/AppBundle/Controller/LuckyController.php// ... class LuckyController{     /**
     * @Route("/lucky/number/{count}")
     */
    public function numberAction($count)
    {
        $numbers = array();
        for ($i = 0; $i < $count; $i++) {
            $numbers[] = rand(0, 100);
        }
        $numbersList = implode(', ', $numbers);         return new Response(
            '<html><body>Lucky numbers: '.$numbersList.'</body></html>'
        );
    }     // ...}
// src/AppBundle/Controller/LuckyController.php  
// ...
// --> add this new use statement
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
class LuckyController extends Controller
{    // ...}
// src/AppBundle/Controller/LuckyController.php // ...class LuckyController extends Controller{
    /**
     * @Route("/lucky/number/{count}")
     */
    public function numberAction($count)
    {
        // ...
        $numbersList = implode(', ', $numbers);         $html = $this->container->get('templating')->render(
            'lucky/number.html.twig',
            array('luckyNumberList' => $numbersList)
        );         return new Response($html);
    }     // ...}

En raison de l'espace réservé {count}{count}占位符,页面URL变得不一样了。现在它要求URL匹配/lucky/number/*,比如/lucky/number/5。这样一来你可以在控制器中收到并使用这个值:

// src/AppBundle/Controller/LuckyController.php // .../**
 * @Route("/lucky/number/{count}")
 */public function numberAction($count){
    // ...     /*
    $html = $this->container->get('templating')->render(
        'lucky/number.html.twig',
        array('luckyNumberList' => $numbersList)
    );
 
    return new Response($html);
    */     // render: a shortcut that does the same as above 快捷方法
    return $this->render(
        'lucky/number.html.twig',
        array('luckyNumberList' => $numbersList)
        );
  }

/lucky/number/xx测试一下,把xx换为任意数字:

http:// localhost:8000 / api / lucky / number / 7

你应该看到幸运数字7被输出!在控制器中增加一个$placeholder参数,你就可以得到路由中任何一个{placeholder}占位符的值只要确保它们的名字相同即可。

系统-路由还可以做更多,像是支持多个占位符(比如/blog/{category}/{page}),令占位符可选以及强制占位符匹配一个正则表达式(比如{count}必须为数字)。

路线章节寻找更多,即可成为路由专家。

渲染模板(利用容器) 

如果你在控制器中返回HTML,你可能需要渲染模板。幸运的是,Symfony拥有Twig:一种易学的模板语言,强大却相当有趣。

目前,LuckyController没有继承任何基类。此时引用Twig(或其他Symfony工具)最简单的方式,就是继承Symfony的Controller, l'URL de la page devient

différente

. Maintenant, il faut que l'URL corresponde à /lucky/number/*, comme
/lucky/number/5

🎜. De cette façon, vous pouvez recevoir et utiliser cette valeur dans votre contrôleur : 🎜🎜🎜
枝条:{# app/Resources/views/lucky/number.html.twig #}
     {% extends 'base.html.twig' %} 
     {% block body %} <h1>Lucky Numbers: {{ luckyNumberList }}</h1>
    {% endblock %}
🎜🎜🎜 Allez sur 🎜🎜/lucky/number/xx🎜🎜 pour la tester et remplacez xx par 🎜🎜 < em>🎜🎜Tous🎜🎜🎜🎜Numéro : 🎜🎜🎜🎜
🎜🎜🎜http://localhost:8000/api/lucky/number/7🎜🎜🎜
🎜🎜 🎜 Vous devriez voir le chiffre porte-bonheur 7 apparaître ! Ajoutez un paramètre 🎜🎜$placeholder🎜🎜 dans le contrôleur et vous pourrez obtenir la valeur de n'importe quel espace réservé 🎜🎜{placeholder}🎜🎜 dans l'itinéraire. J'ai juste le même nom. 🎜🎜🎜🎜🎜🎜Le routage système peut également faire 🎜🎜🎜🎜 plus 🎜🎜🎜🎜, comme prendre en charge plusieurs espaces réservés (tels que 🎜🎜/blog/{category }/{ page}🎜🎜), rendant l'espace réservé facultatif et forçant l'espace réservé à correspondre à une expression régulière 🎜🎜 (telle que 🎜🎜{count}🎜🎜 Doit 🎜🎜🎜🎜 soit un nombre). 🎜🎜🎜🎜🎜🎜Trouvez-en plus dans le chapitre 🎜🎜🎜🎜Routes🎜🎜🎜🎜 pour devenir un expert en routage. 🎜🎜🎜

🎜🎜Modèles de rendu (utilisant des conteneurs) 🎜🎜🎜🎜¶🎜🎜

🎜🎜🎜Si vous renvoyez du HTML dans un contrôleur, vous devrez peut-être restituer le modèle. Heureusement, Symfony dispose de Twig : un langage de modèles facile à apprendre, puissant mais assez amusant. 🎜🎜🎜🎜🎜🎜Actuellement, 🎜🎜LuckyController🎜🎜 n'hérite d'aucune classe de base. Le moyen le plus simple de référencer Twig (ou d'autres outils Symfony) à l'heure actuelle est d'hériter de la classe de base 🎜🎜Controller🎜🎜 de Symfony : 🎜🎜🎜
PHP:<!-- app/Resources/views/lucky/number.html.php -->
<?php $view->extend('base.html.php') ?> 
<?php $view['slots']->start('body') ?>   
 <h1>Lucky Numbers: 
<?php echo $view->escape($luckyNumberList) ?>
<?php $view['slots']->stop() ?>
🎜🎜🎜Utilisez le service de modèles 🎜🎜🎜🎜¶ 🎜 🎜🎜🎜

Ceux-ci ne changent rien, mais vous amènent dans le container/container de Symfony : il s'agit d'un objet de type tableau qui vous permet d'en extraire à l'échelle du système. par A objet utile Ces objets utiles sont appelés service (service), parmi lesquels Symfony envoie un objet de service spécifiquement pour le rendu des modèles, et un autre pour l'enregistrement des journaux, et bien d'autres. , bien d'autres.

Rendez le modèle Twig et le nom du service requis est templatingtemplating

YAML:# app/config/config.yml # ...framework:
    secret: '%secret%'
    router:
    resource: '%kernel.root_dir%/config/routing.yml'
    # ...twig:
    debug:            '%kernel.debug%'
    strict_variables: '%kernel.debug%' # ...


“服务容器”十分重要,学习过程中你会掌握大量相关知识。现在,你只需了解它拥有很多对象,然后你可以通过“昵称”(比如templatinglogger)利用get()来得到其中的任何一个。templating服务,是TwigEngine的实例,里面有个render()方法。

但是还可以再简单些!通过继承Controller基类,你可以使用很多快捷方法,比如render() :

XML:<!-- app/config/config.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:framework="http://symfony.com/schema/dic/symfony"    xmlns:twig="http://symfony.com/schema/dic/twig"    xsi:schemaLocation="http://symfony.com/schema/dic/services        http://symfony.com/schema/dic/services/services-1.0.xsd        http://symfony.com/schema/dic/symfony        http://symfony.com/schema/dic/symfony/symfony-1.0.xsd        http://symfony.com/schema/dic/twig        http://symfony.com/schema/dic/twig/twig-1.0.xsd">     <!-- ... -->     <framework:config secret="%secret%">
        <framework:router resource="%kernel.root_dir%/config/routing.xml" />
        <!-- ... -->
    </framework:config>     <!-- Twig Configuration -->
    <twig:config debug="%kernel.debug%" strict-variables="%kernel.debug%" />     <!-- ... --></container>


"Service Conteneur " C'est très important. Vous maîtriserez de nombreuses connaissances pertinentes au cours du processus d'apprentissage. Pour l'instant, il suffit de comprendre qu'il contient beaucoup d'objets, que vous pourrez ensuite exploiter via des "surnoms" (comme templating ou logger

)
< code>get()
🎜🎜 pour en obtenir un. 🎜🎜templating🎜🎜service est une instance de 🎜🎜TwigEngine🎜🎜, qui a un 🎜🎜render() 🎜🎜Méthode. 🎜🎜🎜🎜🎜🎜Mais ça peut être plus simple ! En héritant de la classe de base 🎜🎜Controller🎜🎜, vous pouvez utiliser de nombreuses méthodes de raccourci, telles que 🎜🎜render()🎜🎜 : 🎜🎜🎜
PHP:// app/config/config.php// ... $container->loadFromExtension('framework', array(
    'secret' => '%secret%',
    'router' => array(
        'resource' => '%kernel.root_dir%/config/routing.php',
    ),
    // ...)); // Twig Configuration$container->loadFromExtension('twig', array(
    'debug'            => '%kernel.debug%',
    'strict_variables' => '%kernel.debug%',)); // ...
🎜À propos du contrôleur Consultez le chapitre sur le contrôleur pour savoir comment fonctionnent les méthodes de raccourci. 🎜🎜🎜🎜🎜🎜Utilisateurs avancés, veuillez vous référer à 🎜🎜🎜🎜Comment définir un contrôleur en tant que service🎜🎜🎜🎜. 🎜🎜🎜🎜🎜"Créer un modèle" perruque"

Corrigez-le en créant un nouveau répertoire app/Resources/views/lucky puis

number.html.twig Placez-le dans :

$  php bin/console config:dump-reference framework
rrreee

Twig vous souhaite la bienvenue ! Ce fichier simple démontre déjà les fonctionnalités de base : une syntaxe telle que {{ variableName }}{{ variableName }}语法被用于打印一些东西。而luckyNumberList这个变量是你在控制器中的render()方法中将其传递进来。

% extends 'base.html.twig' %对应的是一个布局文件,它们位于app / Resources / views / base.html.twig,这个文件随Symfony项目的建立而存在。它相当地单纯(只是一个未经样式处理的HTML结构),供你定制。{% block body %}部分则是使用了嫩枝模板的继承系统/继承系统,将来的其间置于内容父模板base.html.twig布局中的相应位置。

立即刷新页面

http:// localhost:8000 / lucky / number / 9

如果你查看页面源代码,你会看到完整的HTML骨架,多亏了base.html.twig

这只是Twig威力的极小部分。若你希望精通Twig的语法,数组循环,输出其他模板乃至更多超酷功能,应该参阅创建并使用模板

浏览整个项目 

你已经创建了一个弹性的URL,渲染了一个“使用了继承功能”的模板,并且输出了JSON响应。

是时候浏览你的项目中的文件并且去掉它们的神秘光环了。之前你已经在两个极为重要的文件夹中进行作业:

app/

内容配置文件和模板。大体上,只要不是 PHP代码的材料都放在这里。


src/

est utilisée pour imprimer quelque chose. Et la variable 🎜🎜luckyNumberList🎜🎜 est ce que vous transmettez dans la méthode 🎜🎜render()🎜🎜 du contrôleur. 🎜🎜🎜🎜% extends 'base.html.twig' %🎜🎜correspond à un fichier de mise en page, qui se trouve dans 🎜🎜🎜🎜app/Resources/views/base.html.twig🎜🎜 🎜 🎜, Ce fichier existe avec la création du projet Symfony. C'est 🎜🎜🎜🎜 assez 🎜🎜🎜🎜simple (juste une structure HTML sans style) à personnaliser. 🎜🎜{% block body %} La partie 🎜🎜 utilise le 🎜🎜🎜🎜système d'héritage/système d'héritage🎜🎜🎜🎜 du modèle de brindille, et sera placée dans le modèle parent de contenu à l'avenir🎜 🎜 base.html.twig🎜🎜La position correspondante dans la mise en page. 🎜🎜🎜🎜🎜🎜Actualisez la page maintenant🎜🎜🎜
🎜🎜🎜http://localhost:8000/lucky/number/9🎜🎜🎜
🎜🎜🎜Si vous affichez le code source de la page, vous verrez le squelette HTML complet, grâce à 🎜🎜base.html.twig🎜🎜. 🎜🎜🎜🎜🎜🎜Ce n'est qu'une très petite partie de la puissance de Twig. Si vous souhaitez maîtriser la syntaxe de Twig, les boucles de tableau, générer d'autres modèles et des fonctionnalités encore plus intéressantes, vous devriez vous référer à 🎜🎜🎜🎜Création et utilisation de modèles🎜🎜🎜🎜. 🎜🎜🎜

🎜🎜Voir l'intégralité du projet 🎜🎜🎜🎜¶🎜🎜

🎜🎜🎜Vous avez créé une URL flexible, rendu un modèle en utilisant l'héritage et généré une réponse JSON. 🎜🎜🎜🎜🎜🎜Il est temps de parcourir les fichiers de votre projet et de supprimer leur aura de mystère. Auparavant, vous avez travaillé dans deux dossiers extrêmement importants : 🎜🎜🎜
🎜app/🎜
🎜🎜🎜Profils et modèles de contenu. En général, tant que 🎜🎜🎜🎜 n'est pas 🎜🎜🎜🎜 Le matériel de code PHP est placé ici. 🎜🎜🎜
🎜src/🎜

Où se trouve votre programme PHP 99 % du temps, vous travaillerez en src/ (PHP file ) ou sous app/ (autres éléments). Au fur et à mesure que vos compétences techniques s'améliorent, vous apprendrez ce qui se passe sous chaque dossier. src/(PHP文件)或app/(其他东东)之下。随着你的技术实力高大上起来,你会学习到每个文件夹下都发生了什么。

app/目录也存在其他内容,app/AppKernel.php像是,你要用它来开启新捆绑(它是app/下面很少的PHP文件之一)。

src/目录下暂时只有一个目录 - src/AppBundle- 所有的东西都在这里面。一个包,像一个“插件”,你可以找到开源捆绑,然后把它们安装到你的项目中,但就算是你自己的代码,也是处理束之中 - 典型的就是AppBundle(尽管这捆毫无特殊之处)。为了深入了解捆绑,以及为何你应该创建多个捆绑(提示:在项目之间共享代码),请参阅Bundle系统章节。

那么项目中的其他文件夹又是什么情况呢?

web/

它是整个项目的文档根目录,存在可公开访问的文件,比如CSS,图片以及用于执行应用程序(app_dev.phpapp.php)的Symfony的前端控制器(前端控制器)。


tests/

你程序的自动测试(如单元测试/单元测试)被存放在这里。


bin/

用于存放二进制(binary)文件。最重要的是console文件,它被用于控制中执行Symfony命令。


var/

这是那些自动生成的文件被存放的地方,比如缓存文件(var/cache/)和日志文件(var/logs/)。


vendor/

app/#🎜🎜##🎜🎜# Il y a aussi d'autres contenus dans le répertoire, #🎜🎜##🎜🎜#app/AppKernel.php #🎜🎜##🎜🎜#Par exemple, vous devez l'utiliser pour ouvrir un nouveau bundle (c'est #🎜🎜##🎜🎜#app/#🎜🎜## 🎜🎜#Ce qui suit est l'un des rares fichiers PHP). #🎜🎜##🎜🎜##🎜🎜##🎜🎜#src/#🎜🎜##🎜🎜#Il n'y a actuellement qu'un seul répertoire dans le répertoire - #🎜🎜##🎜🎜 #src/AppBundle#🎜🎜##🎜🎜#- Tout est là-dedans. Un package, comme un "plugin", vous pouvez trouver #🎜🎜##🎜🎜##🎜🎜##🎜🎜#open source bundle #🎜🎜##🎜🎜##🎜🎜##🎜🎜# puis mettre Ils sont installés dans votre projet, mais même votre propre code est regroupé - généralement un AppBundle (bien qu'il n'y ait rien de spécial dans ce bundle). Pour en savoir plus sur le regroupement et pourquoi vous devriez créer plusieurs bundles (indice : partager du code entre les projets), voir #🎜🎜##🎜🎜##🎜🎜##🎜🎜#BundleSystem#🎜🎜##🎜 🎜## 🎜🎜##🎜🎜# Chapitre. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Alors quelle est la situation des autres dossiers du projet ? #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜#web/#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#C'est Le répertoire racine du document de l'ensemble du projet, où existent les fichiers accessibles au public, tels que les CSS, les images et les fichiers utilisés pour exécuter l'application (#🎜🎜##🎜🎜#app_dev.php#🎜🎜 ##🎜🎜 # et #🎜🎜##🎜🎜#app.php#🎜🎜##🎜🎜#) Le contrôleur frontal de Symfony (contrôleur frontal). #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜#tests/#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜 🎜#Les tests automatisés de votre programme (tels que les tests unitaires/tests unitaires) sont stockés ici. #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜#bin/#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜 🎜#Utilisé pour stocker des fichiers binaires. Le plus important est le fichier #🎜🎜##🎜🎜#console#🎜🎜##🎜🎜#, qui sert à exécuter les commandes Symfony dans le contrôle. #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜#var/#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜 🎜#C'est ici que sont stockés les fichiers générés automatiquement, tels que les fichiers cache (#🎜🎜##🎜🎜#var/cache/#🎜🎜##🎜🎜#) et les fichiers journaux ( #🎜 🎜##🎜🎜#var/logs/#🎜🎜##🎜🎜#). #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜#fournisseur/#🎜🎜## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 # via le gestionnaire de dépendance # 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 # Composer # 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜 🎜#, les bibliothèques, packages et bundles tiers sont téléchargés ici. Vous ne devez rien modifier dans ce répertoire. Symfony est flexible. Vous pouvez remplacer la structure de répertoires par défaut si nécessaire. Référence

Comment remplacer la valeur par défaut de SymfonyStructure du répertoire.

Configuration au niveau du programme

Symfony a plusieurs bundles natifs intégrés (ouvrez votre fichier app/AppKernel.phpapp/AppKernel.php文件查看),你可以安装更多.bundles的主要配置文件是app/config/config.yml

rrreeerrreeerrreee

framework根键配置的是FrameworkBundle,twig根键配置的是TwigBundle,诸如此类.Symfony中的许多行为都可以被控制,只需改变配置文件的一些选项即可。要搞清原因,请阅读配置参考

或者,通过超好用的bin/console pour afficher), vous Le fichier de configuration principal qui peut installer plus de .bundles est app/config/config.yml

 :

rrreeerrreeerrreeeframeworkLa configuration de la clé racine est FrameworkBundle, twigLa clé racine est configurée avec TwigBundle, etc. De nombreux

comportements dans Symfony peuvent être contrôlés, il suffit de modifier certaines options dans la configuration. déposer. Pour savoir pourquoi, lisez la

Référence de configuration.

Ou utilisez la commande super facile à utiliser

bin/console

pour obtenir un modèle de configuration complet supprimé de la clé racine : rrreee

  • Symfony Le système de configuration est extrêmement puissant, incluant les environnements, les importations, les paramètres, etc. Pour maîtriser tout cela, référez-vous au chapitre

    Configuration

  • .

    Prochaine étape ?
Félicitations ! Vous avez commencé à maîtriser Symfony et apprendrez de nouvelles façons de créer des programmes beaux, fonctionnels, rapides et maintenables.

Bon, encore faut-il se familiariser avec les chapitres suivants pour compléter la maîtrise de l'infrastructure : ControllerRouting Créez et utilisez des modèles

Ensuite, dans le 🎜🎜🎜🎜Livre chinois🎜🎜🎜🎜, apprenez également 🎜🎜🎜🎜service conteneur🎜🎜🎜 🎜, 🎜🎜🎜🎜Système de formulaire🎜🎜 🎜🎜, utilisez 🎜🎜🎜🎜Doctrine🎜🎜🎜🎜 (si vous avez besoin d'interroger la base de données) et plus encore ! 🎜🎜🎜

Il y a aussi un Livre de recettes chinoises#🎜🎜 #, Rempli d'articles "comment faire" plus avancés pour résoudre more question.

Je vous souhaite à tous un bon apprentissage !