Symfony页面包车型大巴主干成立实例详整_php实例

作者:ca88编程

本文实例深入分析了Symfony页面包车型客车基本创造方法。分享给大家供我们参照他事他说加以考查。具体如下:

正文实例汇报了symfony表单与页面实现技艺。分享给我们供大家参照他事他说加以考查。具体如下:

本文深远拆解剖析了Symfony调节层。共享给大家供大家参照他事他说加以考查,具体如下:

此处大家将会学习如何制造叁个模块,那是团队页面包车型客车构造化成分。同不经常间大家也会学习如何创成立三个分成二个动作也一个模板的页面,之所以分为动作与模板,是因为MVC形式。链接与表扬是宗旨的页面人机联作,我们将会学习怎么样在模板中插入这几个成分况兼在动作中进行管理。

symfony开荒很简短,可是意义的数目如故很缺少。现在是时候进行局地askeet站点与客户之间的相互了。而HTML交互作用的根本--除了起链接--就是表单了。

Symfony中央调整制层包涵了连接业务逻辑与表现的代码,调节层为不一样的采取分成了多少个例外的局地。

成立三个模块框架

此地我们的靶子是同意客商登入,并在主页的主题素材列表中进行阅读。那对于开拓来说是飞快的,何况能够让大家回忆起前边的源委。

  1. 前端调整器是指向利用的必须要经过的路入口2. 动作带有了动用的逻辑,他们检查央求的完整性并预备好表示层必要的数据3. 央浼、响应和Session对象提供访问央求参数、响应参数以致悠久的客商数据,那个数据在调整层使用的很宽泛4. 过滤器是各类须要都要试行的代码的意气风发局地,无论在动作前照旧在动作后。能够自创过滤器。

Symfony将页面组织为模块。在创建一个页面早前,大家须要创设贰个模块,并且开始化为叁个Symfony能够识别的文本结构的空壳。

登录表单

前端调整器

Symfony命令行自动化管理模块的成立。我们只供给调用init-module任务,並且动用程序名以致模块名作为参数。在创制了三个myapp程序之后,要向那一个程序中增多叁个mymodule模块,大家得以输入上边包车型大巴授命:复制代码 代码如下:> cd ~/myproject> symfony init-module myapp mymodule

在测量试验数据中留存顾客,不过程序却不曾章程来开展求证。下边大家要在前后相继的每一个页面添加叁个登入表单。展开全局的构造文件askeet/apps/frontend/templates/layout.php,并且在到about的接连此前拉长上边包车型大巴代码行:复制代码 代码如下:

全部WEB央浼都将被前端调控器捕获,前端调控是给定境遇下一切应用的头一无二入口点。当前端调整接到一个呼吁,他接收路由系统相配客户输入的URubiconL的动作名和模块名。举例:

>> dir ~/myproject/apps/myapp/modules/mymodule>> dir ~/myproject/apps/myapp/modules/mymodule/actions>> file ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php>> dir ~/myproject/apps/myapp/modules/mymodule/config>> dir ~/myproject/apps/myapp/modules/mymodule/lib>> dir ~/myproject/apps/myapp/modules/mymodule/templates>> file ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php>> dir ~/myproject/apps/myapp/modules/mymodule/validate>> file ~/myproject/test/functional/myapp/mymoduleActionsTest.php>> tokens ~/myproject/test/functional/myapp/mymoduleActionsTest.php>> tokens ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php>> tokens ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php

当下的构造将那几个链接放在web调节和测验工具栏之后。要观望那一个链接,点击'Sf'Logo折叠起调节和测验工具栏就足以看出了。

与actions/,config/,lib/,templates/,validate/目录相分离,那几个命令只创建七个文件。坐落于test/目录中的二个为单元测验。actions.class.php指向暗中同意的模块迎接页面。templates/indexSuccess.php文件为空。

以往亟待成立user模块。而question模块是在第二天生成的,这一回大家只是叫symfony来创设模块框架,而大家将会和谐来编排这一个代码。复制代码 代码如下:$ symfony init-module frontend user

UOdysseyL调用了index.php脚本,他被掌握为:动作-myAction,模块-mymodule

在actions/actions.class.php文件中暗中认可生成的动作:复制代码 代码如下:forward; } }?>对于每叁个新的模块,Symfony会成立贰个私下认可的index动作。他是由三个名称叫executeIndex的动作方法以至二个名称叫indexSuccess.php的模版文件组成。大家可以由此上面包车型大巴U奥迪Q5L来浏览相应的页面:

本条框架满含叁个私下认可的index动作与二个indexSuccess.php模板。删除他们,因为我们并不供给他们。

后面一个调控器的干活细节

除此而外命令行,Symfony还提供了任何的法子来初步化几个模块。个中二个办法正是手动来创建目录与公事。在不少景观下,一个模块的动作与模板就象征操作叁个加以数据表的数目。因为制造,获取,更新,以至从二个多少表中删除数据记录的总得代码通常都以均等的,Symfony提供了贰个名叫框架的体制来大家转移那么些代码。大家接二连三会三番五次介绍。

创建user/login动作复制代码 代码如下:在user/actions/action.class.php文件中,增多底下的登录动作:

前面叁个调节器分发央求,他仅试行那多少个通用的和协助实行的代码,富含:

增加一个页面

public function executeLogin(){ $this->getRequest()->setAttribute('referer', $this->getRequest; return sfView::SUCCESS;}

  1. 概念核心常量2. 一定symfony库3. 载入和伊始化核心框架类4. 载入配置新闻5. 解码央求U揽胜L,获取要实践的动作和乞请参数6. 假如动作不设有则专属404谬误7. 激活过滤器8. 试行过滤器,第二回9. 实行动作,递交视图10. 实行过滤器,第三遍11. 出口响应。

在Symfony中,页面前面包车型大巴逻辑存款和储蓄在动作中,而表面则是在模板中。没有逻辑的页面依然须求二个空的动作。

这一个动作将referer保存在须要属性中。然后那特性子可为模块所用贮存在贰个潜藏区域中,进而那几个表单的目标动作能够在成功登入后重定向到原本的referer。

私下认可前端调整器

"Hello,world!"页面则会透过三个myAction的动作进行访问。要创建这几个动作,只供给在mymoduleActions类中增加三个executeMyAction方法,如下所示:复制代码 代码如下:

语句return sfView::SUCCESS将动作实施结果传递到loginSuccess.php模块。这条语句是在三个不包蕴重返语句的动作中落实的,那也正是五个动作的默许模块被称之为actionnameSuccess.php的开始和结果。

暗中同意前端调节器叫作index.php,在品种的WEB/目录,他是二个轻便易行的PHP文件,如下:

动作方法的名字总是execute'Xxx'(卡塔尔(英语:State of Qatar)的款型,个中名字的第二片段是动作的名字,并且第三个假名大写。

在动作上上马更加多的干活以前,大家先来看一下模块。

dispatch();

当今大家得以央求上面包车型大巴U哈弗L:

创建loginSuccess.php模块

其一文件在日前早就介绍过了:首先定义多少个变量,然后引进应用的配置config.php,最终调用sfController(那是symfony MVC构造中的大旨调控器对象)的dispatch(卡塔尔方法。最后一步将被过滤器链捕获。

Symfony将会抱怨错失了myActionSuccess.php模板。这是健康的。在Symfony中,叁个页面平日是由一个动和与贰个模板组成的。

web上的多多少人机交互使用表单,而Symfony通过提供八个form扶植器集合来组织表单的创办与管理。

调用另八个前端调节器来转换意况

UEvoqueL是响应的风度翩翩局地

在askeet/apps/frontend/modules/user/templates/目录下,成立下边包车型客车loginSuccess.php模块:复制代码 代码如下:

各类情况存在贰个前端调节器,情况定义在SF_ENVIRONMENT常量中。

Symfony富含多个路由系统允许大家在事实上的动作名与特殊须要调用的U途锐L格式之间有三个完好的相间。那允许自定义U大切诺基L的自定义格式,就不啻他是响应的一片段。大家不再为文件的构造或是伏乞的参数据约束,一个动作的UTucsonL看起来就大家所期待的剖析。比方,到三个名字为article模块的目录动作调用经常如上边包车型客车理之当然:

nickname: get ?>

创造新条件就和开立异的前端调整器相似轻松,举例,你必要叁个staging情况以让你的利用上线以前能够被顾客测量检验。要创设staging意况,拷贝web/myapp_dev.php到web/myapp_staging.php,然后改革SF_ENVIRONMENT常量为staging。今后,你能够在全体的配备文件中追加staging段了设置新条件所急需的东西,看下边包车型客车示范:

这一个UTiguanL由一个多少得到意气风发篇钦定的稿子。不过UENCOREL能够经过在routingyml配置文件中作一些小的退换而以生龙活虎种截然两样的主意开展编写制定:

password:

## app.ymlstaging: mail: webmaster: dummy@mysite.com contact: dummy@mysite.comall: mail: webmaster: webmaster@mysite.com contact: contact@mysite.com##查看结果http://localhost/myapp_staging.php/mymodule/index

那样的U猎豹CS6L不仅对于搜索引擎友好的,他对此顾客来讲也是可怜关键的,那样客户就能够将地址栏作为二个伪码命令来自定义查询,比方上边包车型地铁事例:

getAttribute ?>

批处理文件

Symfony知道什么为顾客拆解深入分析并生成U中华VL。路由系统会自动从二个简洁U福睿斯L中脱去所伏乞的参数,并使其为动作可用。他还要也会格式化响应中所包蕴的超链接,从而使其看起来更为简练。大家将会在第楚辞领悟那一个特点的更加的多内容。

这几个模块是大家首先次利用表单扶植器。那个Symfony函数能够援助大家自动化编写表单标签。form_tag(卡塔尔(英语:State of Qatar)张开一之后标签,使用POST作为暗中同意的动作,而且针对作为参数传递的动作。input_ca88编程,tag(卡塔尔国支持器爆发一个标签,并且依据所传递的首先个参数自动抬高叁个id属性;而暗中认可值则是由第四个参数拿到。大家能够在Symfony生龙活虎书的连带章节查找到越来越多的关于表单扶植器与他们所产生的HTML代码的剧情。

在命令行大概安顿职分中访谈symfony类和特性的时候要求利用批管理公事。批管理公事的起始与前面八个调整器的发端近似——除了前端调整器的分发部分并不是。

简单来说,那就表示大家命名程序的动作的措施不应受到调用他们的U安德拉L的样子的影响,而是受程序中动掸的函数调整。二个动作的名了表明了动作其实所做的源委,并且平时为不定式格式中的三个动词。动作的名字能够产生对于极端客户完全不可以见到,进而无需忧郁使用显式的动作名。大家能够使得的施用代码注释来分解大家的函数效用,进而使代码更读。

此处的原形是当表单提交时则会调用那些动作。所以我们重返来看一下这些动作。

动作动作是应用的心脏,因为他包含了所有应用的逻辑。他们使用模型并定义变量给视图。当在应用中使用一个请求,URL中定义了一个动作和请求的参数。动作类动作是moduleNameActions类中名为executeActionName的方法,以模块组织在一起,模块动作类存储在actions目录的actions.class.php文件中。只有WEB目录下的文件能够被外部访问,前端控制脚本、图片、样式表和JS文件是公开的,即使PHP中方法不区分大小写,但symfony中区分,所以不要忘了动作方法必须以小写execute开始,紧跟着是首字母大写的动作名。如果动作类变得很大,你应该做一些分解并把代码放在模型层,动作应该尽量的保证短小,所有的业务逻辑都应该放在模型层中。可选的动作类语法可以一个动作一个文件,文件的名称为动作名加Action.class.php,类名为动作名加Action,只是记得类继承自sfAction而非sfActions。在动作中获取信息动作类提供了一种访问控制器相关信息与核心symfony对象的方法,下面演示了如何使用:getRequestParameter; // Retrieving controller information $moduleName = $this->getModuleName(); $actionName = $this->getActionName(); // Retrieving framework core objects $request = $this->getRequest(); $userSession = $this->getUser(); $response = $this->getResponse(); $controller = $this->getController(); $context = $this->getContext(); // Setting action variables to pass information to the template $this->setVar; $this->foo = 'bar'; // Shorter version }}

增加二个模板

管理表单提交

上下文:

动作须要叁个模板来进行李包裹装。叁个模板正是坐落一个模块的templates/目录的贰个文书,日常是以动作和动作的词尾来张开命名的。私下认可的动作词尾为"success",所认为myAction动作所创造的沙盘模拟经营文件应命名称为myActionSuccess.php。

用上边包车型大巴代码来替换大家刚刚所编纂的登录动作:复制代码 代码如下:public function executeLogin(卡塔尔(قطر‎{ if ->getMethod { // display the form $this->getRequest(卡塔尔(قطر‎->setAttribute('referer', $this->getRequest; } else { // handle the form submission $nickname = $this->getRequestParameter; $c = new Criteria(卡塔尔; $c->add(UserPeer::NICKNAME, $nickname卡塔尔国; $user = UserPeer::doSelectOne; // nickname exists? if { // password is OK? if { $this->getUser(卡塔尔(قطر‎->setAuthenticated; $this->getUser(卡塔尔->addCredential; $this->getUser(卡塔尔(قطر‎->setAttribute('subscriber_id', $user->getId; $this->getUser()->setAttribute('nickname', $user->getNickname; // redirect to last page return $this->redirect($this->getRequestParameter('referer', '@homepage')); } } }}

在前边二个调节器中四个sfContext::getInstance(卡塔尔的调用。在动作中,getContext(卡塔尔方法是单例形式(即具备的调用都是率先个实例,那对于仓储指向与给定央求相关的symfony核心对象的目录的景况是老大管用的)。

模板只饱含表现代码,所以在当中要含有尽可有少的PHP代码。实际上,三个来得"Hello,world!"的页面独有大器晚成行的代码的沙盘模拟经营。复制代码 代码如下:

登入动作能够同时用来呈现登录表单而且开展拍卖。相应的,他必需清楚所调用的条件。假如那些动作并未在POST情势下调用:而那便是大家在前边所探讨的情景。如若是在POST形式下乞请的,那么则会由表单调用这几个动作并张开相应的拍卖。

sfController:调控器对象 sfRequest:伏乞对象 sfResponse:响应对象 sfUser:顾客Session对象 sfDatabaseConnection:数据库链接 (->getDatabaseConnectionsfLogger:日志对象 sfI18N:国际化对象能够在代码的别的位寄存置sfContext::getInstance(卡塔尔(قطر‎。

Hello, world!

以此动作会由须要参数获得nickname域的值,并且查询User表来查阅在数据库是或不是存在那客商。

动作终止

只要大家须求在模板中运营一些PHP代码,大家应防止使用上面所列的日常性的PHP语法。相反,应接纳另黄金年代种PHP语法来编排大家的模版,进而使得代码对于非PHP程序来讲更易于掌握。不仅仅最后代码是不错的,何况推进大家在动作中保证复杂的PHP代码,因为唯有调整语句有对应代码。

前不久三个密码调节将会为客户分配凭证。可是以后,这一个动作所做的只是在二个会话属性中存款和储蓄客商的id与nickname属性。最终,那几个动作重定向到表单中逃匿中的原始referer域,那是作为叁个号召参数字传送递的。假若那一个域是空的,则会动用私下认可值。

当动作施行到位后会现身种种行为,动作方法的重返值决定视图如何被实行。sfView类的常量平日被钦命与模板来展现动作的结果。假诺三个默许视图被调用,动作应该以上面包车型客车代码甘休:

平常的PHP语法如下:复制代码 代码如下:

那边大家必要介意那些例子中两连串型的属性集合之间的分别:request attributes->setAttribute是为模板所保存的,並且尽管答案件发生送到referer则会被忘记。session attributes->setAttribute是在全部客商会话生命期被封存的,并且在几天前别的的动作也足以访谈他们。假诺我们期望了解越来越多的关于属性的剧情,大家能够查阅Symfony生龙活虎书的参数保存器焕发青新年。

return sfView::SUCCESS;

Hello, world!

分红权限

Symfony将找出actionNameSuccess.php的模板,那是暗中认可的作为,所以即使您忽略了return语句,symfony也将查找actionNameSuccess.php模板,空动作也将触及一样的表现,如下:

代表的PHP语法如下:复制代码 代码如下:

客户能够登录进askeet网址是风流倜傥件好事,可是客户并不仅是因为有意思而登入。宣布一个新题材,对某一个主题材料代表兴趣,评价叁个评价都亟需登录。而其它的动作将会向非登入顾客开放。

# 将调用indexSuccess.php模板public function executeIndex(){ return sfView::SUCCESS;}# 将调用listSuccess.php模板public function executeList(){}

Hello, world!

要将二个客商安装为通过认证的,大家须求调用sfUser对象的->setAuthenticated(卡塔尔国方法。这么些指标同期提供了叁个注解机制,来经过安插范围访问。Symfony风华正茂书的顾客证书大器晚成节对此进行了详细的解说。

万生龙活虎要调用错误视图,动作将以上面语句截止:

由动作向模板传递音讯

那正是上面两行的目标:复制代码 代码如下:$this->getContext->setAuthenticated;$this->getContext->addCredential;

# symfony将查找actionNameError.php模板return sfView::ERROR;

动作的劳作是要造成具备复杂的测算,数据读取以致测验,并且安装要出口或是测量检验的模板变量。Symfony使得动作类的性质在大局名字空间中为模板可用。上面彰显怎么由动作向模板传递音讯。

当nickname被辨认后,不止顾客数据被贮存在在对话属性中,并且那么些客户也会被分配网址限量部分的走访权限。在后日我们将会看出怎么着界定验证客商的主次访谈。

调用自定义视图

在动作中装置动作属性从而使其为模板可用:复制代码 代码如下:hour = $today['hours']; }}

添加user/logout动作

# symfony将查找actionNameMyResult.php模板return 'MyResult';

模板直接访问动作属性:复制代码 代码如下:

关于->setAttribute(卡塔尔国方法还或许有最终一个秘技:最后二个参数定义了品质贮存的名字空间。多个名字空间不止允许四个在另贰个名字空间存在的名字钦赐给四个天性,并且能够行使二个命令飞速移除全数这个属性:复制代码 代码如下:public function executeLogout->setAuthenticated; $this->getUser; $this->getUser(卡塔尔(قطر‎->getAttributeHolder(卡塔尔->removeNamespace; $this->redirect;}

黄金年代经动作不想调用模板,能够动用上面包车型地铁语句

Hello, world!

应用名字空间能够节约大家一个一个移除这一个属性的分神:这只是单排语句。

return sfView::NONE;

Or should I say good evening? It's already .

履新布局

上边意况下,视图层将被忽视,HTML代码能够一向在动作中输出,symfony提供了八个新鲜的方法renderText(卡塔尔(英语:State of Qatar)来贯彻。这种状态相比较适用于AJAX人机联作。

模板已经得以访问片段多少,而无需在动作中设置任何变量。每八个模板平常能够调用$sf_context,$sf_request,$sf_params,$sf_user对象的方法。他们带有与当下内容,伏乞,须求参数以至会话相关的数额。大家快速就能学到他们的用法。

现阶段以此布局尽管用户已经登入照旧呈现多少个'login'链接。让我们来校勘那或多或少。在askeet/apps/frontend/templates/layout.php文件中,改良我们在前几日的指清华始时所纠正的代码:复制代码 代码如下:isAuthenticated: ?>

public function executeIndex(){ echo "Hello, World!"; return sfView::NONE;}// 等价方法public function executeIndex(){ return $this->renderText("Hello, World!");}

行使表单向客商搜集消息

getAttribute('nickname', '', 'subscriber').' profile', 'user/profile') ?>

稍稍时候你必要发送空的响应但含有定义的头信息,定义头通过sfResponse对象,并且放回sfView::HEADEHaval_ONLY常量:

表单是向客户采摘音信的叁个好法子。使用HTML编写表单以至表单成分一时是一定麻烦的,特别是当大家期待适用于XTHML时更是如此。大家得以用普通的艺术在Symfony模板中包含表单成分,如上边所示,不过Symfony提供了补助器进而使得这么些职分尤其轻巧。

现今是时候实行测量检验了,大家能够显得程序的此外后生可畏页,点击'login'链接,输入叁个可用的别称况兼展开求证。如若窗口顶端的'login'变为'sign out',则大家所做的一切都以准确的。末了,试着注销来查看'login'链接是或不是再度现身。

public function executeRefresh(){ $output = ''; $this->getResponse()->setHttpHeader("X-JSON", '; return sfView::HEADER_ONLY;}

模板可以包蕴普通的HTML代码:复制代码 代码如下:

难点集体

固然动作必须呈交特定模板,使用setTemplate(卡塔尔方法来忽视return语句:

Hello, world!

趁着数以千计的Symfony爱好者访谈askeet网址,在主页上展现的难题就能够逐步变多。为了防止变慢的伏乞速度,难题列的自由翻阅就改成必得消除的标题。

$this->setTemplate;

Or should I say good evening? It's already .

Symfony为这一目的提供了多个目的:sfPropelPager。他会卷入到多少的诉求,进而只会询问当前页面所呈现的笔录。举个例子,假诺三个页面起先化时每页只显示12个难题,则到多少的伸手只会约束为10个结实,况且会安装偏移来在页面中开展相称。

跳向另八个动作

八个补助器是用在模板中的由Symfony定义的PHP函数。他输出HTML代码,何况比大家温馨编排实际的HTML代码要飞快得多。使用Symfony扶助器,大家用下边包车型大巴代码获得的出口结果与地点平时的HTML代码相像:复制代码 代码如下:

修改question/list动作

稍稍景况下,动作以必要二个新的动作作为完成,举个例子,三个动作管理表单的POST提交在更新数据库后平时会转接到另三个动作。另一个例证是动作别称:index动作平时是来达成显示,所以其实是跳向了list动作。

Hello, world!

在前方的演练中,大家看出了难点模块的展现动作:复制代码 代码如下:public function executeList (卡塔尔国{ $this->questions = QuestionPeer::doSelect;}

有两种情势来贯彻另叁个动作的实行:

Or should I say good evening? It's already .

大家将会改善这么些动作来向模板传递叁个sfPropelPager实际不是传递四个数组。同偶尔候,大家会基于感兴趣的数码来对难题举行排序:复制代码 代码如下:public function executeList (卡塔尔国{ $pager = new sfPropelPager; $c = new Criteria(卡塔尔; $c->addDescendingOrderByColumn(QuestionPeer::INTERESTED_USERS); $pager->setCriteria; $pager->setPage($this->getRequestParameter; $pager->setPeerMethod; $pager->init(); $this->question_pager = $pager;}

$this->forward('otherModule','otherAction');

$this->redirect('otherModule/otherAction');$this->redirect('http://www.google.cn');

假定在地点的代码中,我们感到选取援助器的版本并不会比编写HTML代码快,那么我们得以思虑一下上边包车型大巴境况:复制代码 代码如下: 'Visa', 'MAST' => 'MasterCard', 'AMEX' => 'American Express', 'DISC' => 'Discover'卡塔尔(英语:State of Qatar); echo select_tag('cc_type', options_for_select;?>

sfPropelPager对象的开始化指明了他包含哪些指标类,以至在一个页面中能够停放的对象的最大数量方法运用二个倡议参数来设置当前页面。比方,固然这几个页面参数的值为2,sf普罗PellPager将会回到3到5的结果。页面诉求参数的值变为1,则页面暗中认可会重回1到2的结果。大家得以在Symfony蓬蓬勃勃书的页面章节中询问到关于sfPropelPager对象及其方法的越来越多新闻。

Forward和redirect前边的言语将不会被履行,你可以精通为他们等价于return语句。他们抛出sfStopException万分来终止动作的施行

那会收获上边包车型大巴HTML输出结果:复制代码 代码如下: Visa Master卡德 American Express Discover

应用二个暗许参数

二者的不一样:forward是中间的拍卖,对客商是晶莹剔透的,即顾客不会深认为动作产生了调换,UKoleosL也不会变动。相反,redirection是动作的真正跳转,U凯雷德L的更改是最直白的反映。

在模板中选拔的协理器的利润就在于加快了编码的速度,代码的流芳百世与轻松。而代价正是大家须求耗费时打开课习。所以大家得以在模板中不接纳Symfony援助器,并且以大家普通的不二等秘书诀来编排代码,不过那会是八个宏大的损失。

将常量放在我们所使用的安插文件中是三个好主意。比如,每页的结果能够由一个在我们自定义的程序配置中的参数来顶替。用上面包车型大巴代码来退换下面的sfPropelPager行:复制代码 代码如下:.. $pager = new sfPropelPager('Question', sfConfig::get('app_pager_homepage_max'));

假设动作是被POST提交表单调用的,你最棒利用redirect。那样,假若客户刷新了结果页面,POST表单不会被重复提交;别的,后退按键也能很好的回到到表单呈现页面并非二个警报窗口询问顾客是不是再一次提交POST伏乞。

只顾,短开放标识的用法(

此间的pager关键字是用作名字空间应用的,那也便是怎么在参数名字中冒出的来头。大家得以在Symfony黄金年代书的布置一节中查阅到越多的有关自定义配置与命名自定义参数法规的越来越多的剧情。

Forward404(卡塔尔国方法是风华正茂种常用的新鲜forward,他跳到“页面无法找到”动作。

表单管理有特意的后生可畏章实行研讨,因为Symfony提供了比比较多工具,绝大数的扶植器,来使其简要。大家将会在第10章精晓到关于协助器越多的颠末。

修改listSuccess.php模板

涉世表明,超多时候四个动作会在认证一些东西后redirect只怕forward另三个动作。那就是为啥sfActions类有众多的情势命名称叫forwardIf, forward404If, redirectIf,这个办法大致地动用多个测量试验结果参数true或false:

链接到另一个动作

在listSuccess.php模板中,将上面包车型大巴代码行:复制代码 代码如下:

public function executeShow(){ $article = ArticlePeer::retrieveByPK($this->getRequestParameter; $this->forward404If;}public function executeShow(){ $article = ArticlePeer::retrieveByPK($this->getRequestParameter; $this->forward404Unless;}

笔者们将来早就清楚在动作名字与特需调用的U奥迪Q5L之间有多少个分手。所以我们运用上面包车型大巴诀窍来创设到另叁个动作的链接时,他只会职业在暗中认可的路由系统中。借使我们随后决定改善UOdysseyL的道理当然是这样的,那么我们就供给查阅全数的模板来改换超链接。

更迭为复制代码 代码如下:getResults: ?>

那几个方法不不过压缩你的代码行数,他们还使得你的次序越发易读。

超链接,常常的格局:复制代码 代码如下:I never say my name

因此页面突显存款和储蓄在页面中的结果列表。

当动作调用forward404(卡塔尔或许别的相符方式,symfony抛出管理404响应的sfError404Exception极度,也等于说假如你想展示404音讯,你没有须要访问调整器,你只是抛出那几个丰盛就可以。

要幸免这样的劳动,大家应总是利用link_to(卡塔尔援助器来大家的顺序动作创设超链接。上边包车型地铁例子演示了超链接帮助器的用法。

加上页面浏览

模块中多个动作重复代码的管理方式

link_to(卡塔尔(英语:State of Qatar)补助器:复制代码 代码如下:

在这里个模板中还索要做别的朝气蓬勃件事:页面浏览。以后,模板所做的只是呈现前七个难点,不过大家应加多到下三个页面包车型地铁机能,以致回到前八个页面包车型客车功效。要水到渠成增加那些功用,我们供给在模板前面增加上边包车型大巴代码:复制代码 代码如下:

preExecute方法是二个模块中多少个动作同盟的事物。能够在调用executeAction(卡塔尔(قطر‎以前和事后施行。

Hello, world!

haveToPaginate: ?> getPreviousPage ?> getLinks: ?> getPage(), $page, 'question/list?page='.$page) ?> getCurrentMaxLink ? '-' : '' ?> ', 'question/list?page='.$question_pager->getNextPage ?> getLastPage ?>

class mymoduleActions extends sfActions{ public function preExecute() { // 这里的代码在每一个动作调用之前执行 ... } public function executeIndex() { ... } public function executeList() { ... $this->myCustomMethod(); // 调用自定义的方法 } public function postExecute() { // 这里的代码会在每个动作结束后执行 ... } protected function myCustomMethod() { // 添加自己的方法,虽然他们没有以execute开头 // 在这里,最好将方法定义为protected ... }}

Or should I say good evening? It's already .

这段代码应用了sfPropelPager对象的各个艺术,甚至->haveToPaginate(卡塔尔(قطر‎,这一个函数独有在伸手的结果数目超越了页面尺寸时才会重回真;而->getPreviousPage,->getLastPage(卡塔尔都抱有明显示的含义;->getLinks(卡塔尔国函数提供了二个页面号的数组;而->getCurrentMaxLink(卡塔尔(قطر‎函数重回最后的页面号。

拜谒诉求

本文由ca88发布,转载请注明来源

关键词: 详解 之家 脚本 实例