出自<https://openclassrooms.com/courses/developpez-votre-site-web-avec-le-framework-symfony/mon-premier-hello-world-avec-symfony>
网站的路径(Route或chemin)让Symfony知道哪个控制器运行
1.Créons notre route 创建路径
我们在刚创建的OCPlatformBundle中执行操作,所以先进入src/OC/PlatformBundle
创建页面,首先要让该URL可访问,所以要先创建路径。
Routeur 的作用是使参数和URL对应,下面的图解释了router的作用:
URL需要的是/hello-world,对应的控制器是Advert。
1.创建我们的route文件
该文件在我们创建bundle的时候已经自动生成了,是Resources/config/routing.yml
。我们在其中添加:
: { : OCPlatformBundle:Advert:index }
这样我们就创建了第一个路径。
注意:
1 首行缩进是4个空格,不包含制表符。这么提醒是将来可能会遇到相应的问题。
(个人实际操作:在这里没有区别)
2 如果你是复制黏贴的,可能会遇到错误。问题原因可能在于为你文件编码转换(UTF-8)。
hello_the_world
是你路径的名字,命名随意,除了不能重复。
path
是你想要显示的路径
defaults
是你路径的参数
_controller
是我们想要让控制器执行的行为
OCPlatformBundle:Advert:index
Bundle:要打开的控制器:该控制器的一种执行方法
Advert与src/OC/PlatformBundle/Controller/AdvertController.php
对应。
2 Informons Symfony que nous avons des routes pour lui
告诉symfony我们创建了路径
我们其实可以直接在app/config/routing.yml
中添加路径,这样更快。但这样与我们将内容分成bundle的宗旨不符。
En effet, cette route concerne le bundle de notre plateforme, elle doit donc se trouver dans notre bundle et pas ailleurs. N'oubliez jamais ce principe.
这个route与我们的bundle相关,所以他应该在我们的bundle中而不是在外部。所以我们只应在src/OC/PlatformBundle/Resources/config/routing.yml
中改route。
3 创建我们控制器
控制器的角色:
1、控制器是我们网站的胶水。
2、他使用所有其他组件(数据库,表单,模板等)为了生成对我们请求的回复。
3、在这里有我们网站的所有逻辑:如果用户连接并有权限修改文章,那么我能打印出这个blog的编辑表单。
创建我们的控制器:
1、我们控制器Advert文件
控制器在目录Controller
中。我们需要创建文件src/OC/PlatformBundle/Controller/AdvertController.php
:
}
这时我们访问http://localhost/Symfony/web/app_dev.php/hello-world
会有我们刚创造的页面。
理解这个文件:
行5:让我们处于我们这个bundle的控制器命名空间里
行7:我们控制器运用Response
对象,所以我们需要定义运用
行11:定义方法indexAction,需要加入后缀Action。
行13:创建响应response
4. 创建模板Twig
Twig是一个动态生成网页模板的引擎。
1、创建模板文件
放模板的地方在Resources/views
文件夹,在这里我们要创建我们的Advert
文件夹和index.html.twig
文件,因此我们有了src/OC/PlatformBundle/Resources/views/Advert/index.html.twig
。
index : 模板的名。
html :模板内容的类型。
twig :模板的类型。
模板中写:
2、 控制器调用模板
调用模板的方法在indexAction()
中,我们修改AdvertController.php:
}
render中:NomDuBundle:NomDuContrôleur:NomDeLAction
$this->get('templating')
是什么?这个是从控制器中返回一个对象temlpating,该对象可以执行一些actions。
现在我们访问http://localhost/Symfony/web/app_dev.php/hello-world
会看到我们更改后的内容。
现在如果我们想要在twig运用变量,我们可以修改控制器:
;
然后我们修改twig:<h1>Hello {{ nom }} !</h1>
现在程序中多余可以删除的地方:
控制器:Controller/DefaultController.php
vue目录:Resources/views/Default
在Resources/config/routing.yml
中路径oc_platform_homepage
还可以删除所有和AppBundle相关的(这是和symfony2相关的):
-目录:src/AppBundle
-app/AppKernel.php
19行用来激活new AppBundle\AppBundle()
-app/config/routing.yml
5-7行用来引入AppBundle路径文件的app: resource: "@AppBundle/Controller/" type: annotation"
-app/config/services.yml
17-35行
删除文件后,刷新页面可能会产生问题。这是因为缓存的原因。我们可以用指令:php bin/console cache:clear
(在prod环境中:php bin/console cache:clear --env=prod
)来清理缓存