听事件
听事件
当前的布局是失踪的一个导航头回到主页或开关从一个会议到下一个。
添加一个网站标题
任何在所有web页面应该显示,像一头,应该主要基地布局的一部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
- - - /模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -14 6 + 14,15 @@{% endblock %} < /头> <身体>+ <标题>+ < h1 > < a href = "{{路径(主页)}}" >留言板< / > < / h1 >+ < ul >+{%为会议会议%}+ <李> < a href = "{{路径(“会议”,{id:会议。id})}} " >{{会议}}< / > < /李>+ {% endfor %}+ < / ul >+ <人力资源/ >+ < /头>{%块体%}{% endblock %} < /身体> < / html >
将此代码添加到布局意味着所有模板必须定义一个扩展它会议
必须创建变量,并通过控制器。
我们只有两个控制器,你可能做以下代码(不适用变化很快我们将学习一个更好的方法):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -21年12 + 21日13 @@类ConferenceController延伸AbstractController} #(路线(“/会议/ {id}”,名字:“会议”))公共函数显示(请求美元请求、会议会议上,美元CommentRepository CommentRepository美元):反应+公共函数显示(请求美元请求、会议会议上,美元CommentRepository CommentRepository美元,ConferenceRepository ConferenceRepository美元):反应{$抵消= max(0, $请求- >查询- > getInt(“抵消”,0));$ paginator = $ commentRepository - > getCommentPaginator(会议,抵消美元);返回$ this - >渲染(会议/ show.html。嫩枝”,(+“会议”= > $ conferenceRepository - > findAll (),“会议”= > $发布会上,“评论”= > paginator美元,“之前”= >抵消美元- CommentRepository:: PAGINATOR_PER_PAGE,
想象更新几十个控制器。和在所有新的做同样的。这不是非常实用。必须有一个更好的方法。
树枝有全局变量的概念。一个全局变量可用在所有呈现模板。您可以定义一个配置文件,但它只适用于静态值。添加所有会议树枝全局变量,我们要创建一个监听器。
发现Symfony事件ob娱乐下载
ob娱乐下载Symfony是内置事件分派器组件。一个调度程序分派某些事件在特定时间听众可以听。听众被钩到框架内部。
例如,一些事件让你与HTTP请求的生命周期。在处理请求期间,调度分派事件创建一个请求时,控制器将被执行时,当准备好发送响应,或者当一个异常被抛出。一个侦听器可以听一个或多个事件和执行一些逻辑基于事件背景。
事件定义的扩展点,使更通用的、可扩展的框架。许多Symob娱乐下载fony的组件(比如安全、信使、工作流、梅勒广泛使用它们。
行动的另一个内置的事件和监听器的例子是一个命令的生命周期:您可以创建一个侦听器来执行代码任何命令运行。
任何包或包也可以派遣自己的事件代码的可扩展性。
为了避免一个配置文件来描述事件侦听器想听,创建一个订阅者。用户是一个静态的侦听器getSubscribedEvents ()
方法返回它的配置。这允许用户在Symfony调度程序自动注册。ob娱乐下载
实现一个用户
你知道这首歌的心现在,使用制造商包生成一个用户:
1
美元ob娱乐下载symfony控制台:订户TwigEventSubscriber
命令问你想听哪些事件。选择ob娱乐下载
事件,派出前控制器。这是最好的时间注入会议
全局变量,所以树枝将访问它时,控制器将呈现模板。更新你的用户如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29
- - - / src / EventSubscriber / TwigEventSubscriber.php+ + + b / src / EventSubscriber / TwigEventSubscriber.php25 @@ @@ 2 14 + 2名称空间的应用程序\ EventSubscriber;+使用App \ Repository \ ConferenceRepository;使用Syob娱乐下载mfony \ \ EventDispatcher \ EventSubscriberInterface组件;使用Syob娱乐下载mfony \组件\ HttpKernel \ \ ControllerEvent事件;+使用树枝\环境;类TwigEventSubscriber实现EventSubscriberInterface {+私人美元树枝;+私人conferenceRepository美元;++公共职能__construct(环境树枝美元,ConferenceRepository ConferenceRepository美元)+ {+ $ this - >枝= $树枝;+ $ this - > conferenceRepository = $ conferenceRepository;+}+公共函数onControllerEvent (ControllerEvent事件美元):空白{- / /…+ $ this - >树枝> addGlobal(“会议”,$ this - > conferenceRepository - > findAll ());}公共静态函数getSubscribedEvents():数组
现在,你可以添加你想要尽可能多的控制器:会议
变量总是会在树枝。
请注意
我们将讨论一个更好的替代属性在后面的步骤。
整理会议和城市
订购会议列表可能方便浏览。我们可以创建一个自定义的方法来检索和排序所有的会议,但是,我们要覆盖默认的实现findAll ()
确保分类方法应用无处不在:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
- - - / src /仓库/ ConferenceRepository.php+ + + b / src /仓库/ ConferenceRepository.php@@ -21年6 + 21日11 @@ ConferenceRepository ServiceEntityRepository扩展父类::__construct(美元注册表、会议::类);}+公共职能findAll():数组+ {将其作为findBy +返回$ this - >([],[“年”= >“ASC”,“城市”= > ' ASC ']);+}+公共函数保存(会议实体美元,美元bool冲洗= false):空白{$ this - > getEntityManager() - >保存(实体);
在这一步中,网站应该看起来像下面的:
要进一步
- 的请求-响应流在Syob娱乐下载mfony应用程序;
- 的内置Symfonyob娱乐下载 HTTP事件;
- 的内置Symfonyob娱乐下载控制台事件。