phalcon笔记大全.docx

上传人:b****8 文档编号:11074645 上传时间:2023-02-24 格式:DOCX 页数:36 大小:30.02KB
下载 相关 举报
phalcon笔记大全.docx_第1页
第1页 / 共36页
phalcon笔记大全.docx_第2页
第2页 / 共36页
phalcon笔记大全.docx_第3页
第3页 / 共36页
phalcon笔记大全.docx_第4页
第4页 / 共36页
phalcon笔记大全.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

phalcon笔记大全.docx

《phalcon笔记大全.docx》由会员分享,可在线阅读,更多相关《phalcon笔记大全.docx(36页珍藏版)》请在冰豆网上搜索。

phalcon笔记大全.docx

phalcon笔记大全

路由执行事件

依次按以下顺序执行:

dispatch:

beforeDispatchLoop

开始循环匹配路由

dispatch:

beforeDispatch

dispatch:

beforeNotFoundAction

dispatch:

beforeExecuteRoute

beforeExecuteRoute($dispatcher)

initialize()->dispatch:

afterInitialize

执行路由到的方法

dispatch:

afterExecuteRoute

dispatch:

afterDispatch

afterExecuteRoute($dispatcher)

结束循环匹配路由

dispatch:

afterDispatchLoop

其中,以“dispatch:

”开头的均为eventManager中定义的事件名称。

“xxx(...)”这种格式的均为控制器中的方法。

控制器命名

默认调用IndexController控制器中的indexAction方法。

 

控制器名称需要加Controller后缀,动作名称需要加Action后缀。

 

控制器的首字母要大写且继承自Phalcon\Mvc\Controller。

 

控制器的文件名称与控制器全名完全相同并加扩展名“.php”。

视图渲染

Phalcon\Mvc\View 默认采用PHP本身作为模板引擎,此时应该以.phtml作为视图文件扩展名。

可以在控制器方法中使用$this->view->setVar("postId",$postId);来传递变量到视图,然后在视图中用php来使用此变量,比如:

phpecho$postId;?

>,setVar方法也可以通过接收关键字索引数组来一次传递多个值(类似于smarty中assign的批量赋值)。

Phalcon\Mvc\View 支持视图分层。

分层渲染

第一步、渲染模板:

视图文件目录/小写的控制器名(不含后缀)/方法名(不含后缀).phtml 

并保存结果。

级别代号LEVEL_ACTION_VIEW。

可在此模板中通过调用

phpecho$this->getContent()?

>输出控制器中的输出内容(比如在控制器中使用echo输出一些内容)。

第二步、渲染模板(如果有):

 

视图文件目录/layouts/小写的控制器名(不含后缀).phtml 

并保存结果。

级别代号LEVEL_LAYOUT。

可在此模板中通过调用

phpecho$this->getContent()?

>输出第一步的模板结果。

第三步、渲染模板(如果有):

 

视图文件目录/index.phtml 

并保存结果。

级别代号LEVEL_MAIN_LAYOUT。

同样的,可在此模板中通过调用

phpecho$this->getContent()?

>输出第二步的模板结果。

最后保存的结果就是视图的最终结果。

可以在控制器方法中使用$this->view->setTemplateAfter('common');来在第三步之前插入一个渲染操作,比如这里渲染模板:

视图文件目录/layouts/common.phtml

渲染级别控制

可以在控制器方法中使用$this->view->setRenderLevel(View:

:

LEVEL_NO_RENDER);来关闭渲染,或者仅仅渲染某个级别$this->view->setRenderLevel(View:

:

LEVEL_ACTION_VIEW);

也可以使用$this->view->disableLevel(View:

:

LEVEL_MAIN_LAYOUT);来禁止某个级别的渲染。

可以用$this->view->pick('index/pick');选择视图:

1.如果pick方法接收到一个不包含“/”的字符串则仅仅设置LEVEL_ACTION_VIEW级视图;如果包含“/”则同时还会把第一个“/”前面的部分作为LEVEL_LAYOUT级视图,比如这里会使用“视图文件目录/layouts/index.phtml”文件

2.如果接收到一个数字索引数组,则会将编号为0的元素作为LEVEL_ACTION_VIEW级视图,将编号为1的元素作为LEVEL_LAYOUT级视图

关闭视图

如果你的控制器不在视图里产生(或没有)任何输出,你可以禁用视图组件来避免不必要的处理:

$this->view->disable();

在模板中包含局部模板

php$this->partial('shared/login');?

>

或者同时传递变量给局部模板,每一个索引最终会作为变量在局部模板中被赋值:

php

$this->partial('shared/login',array(

'var1'=>'val1',

'var2'=>'val2'

));

?

>

缓存视图

在控制器方法中的代码例子:

//Checkwhetherthecachewithkey"downloads"existsorhasexpired

if($this->view->getCache()->exists('downloads')){

//Querythelatestdownloads

$latest=Downloads:

:

find(array(

'order'=>'created_atDESC'

));

$this->view->latest=$latest;

}

//Enablethecachewiththesamekey"downloads"

$this->view->cache(array(

'service'=>'myCache',//使用自己的缓存服务,不设置时默认为viewCache

'lifetime'=>86400,//缓存时间

'key'=>'downloads'//缓存索引名

));

注册缓存服务:

php

usePhalcon\Cache\Frontend\OutputasOutputFrontend;

usePhalcon\Cache\Backend\MemcacheasMemcacheBackend;

//Settheviewscacheservice

$di->set('viewCache',function(){

//Cachedataforonedaybydefault

$frontCache=newOutputFrontend(array(

'lifetime'=>86400

));

//Memcachedconnectionsettings

$cache=newMemcacheBackend($frontCache,array(

'host'=>'localhost',

'port'=>'11211'

));

return$cache;

});

其中“Phalcon\Cache\Frontend”中包含了对前台数据的处理操作(比如数据格式编码等); 

“Phalcon\Cache\Backend”中包含了对各种后台缓存引擎的操作。

使用模板引擎

∙在控制器方法中指定模板引擎:

∙//Usingmorethanonetemplateengine

∙$this->view->registerEngines(

∙array(

∙'.my-html'=>'MyTemplateAdapter',

∙'.phtml'=>'Phalcon\Mvc\View\Engine\Php'

∙)

);

方法Phalcon\Mvc\View:

:

registerEngines()接受一个包含定义模板引擎数据的数组。

每个引擎的键名是一个区别于其他引擎的拓展名。

模板文件和特定的引擎关联必须有这些扩展名。

Phalcon\Mvc\View:

:

registerEngines()会按照相关模板引擎定义的顺序来执行。

如果Phalcon\Mvc\View发现视图文件具有相同名称但扩展名不同,它只会使用第一个。

∙在注册view服务时全局指定模板引擎:

php

∙usePhalcon\Mvc\View;

∙//Settinguptheviewcomponent

∙$di->set('view',function(){

∙$view=newView();

∙//Atrailingdirectoryseparatorisrequired

∙$view->setViewsDir('../app/views/');

∙$view->registerEngines(array(

∙'.my-html'='MyTemplateAdapter'//元素值可以是类名、服务名或返回模板引擎对象的匿名函数

∙));

∙return$view;

},true);

Volt视图最终会被编译成纯PHP代码

Volt模板引擎语法

3种不同含义的起始标签

1.{%...%}包裹的标签用于赋值或执行for循环、if条件判断等语句

2.{{...}}包裹的标签用于打印表达式的结果到模板

3.{#...#}包裹注释,前后标签可以处于不同行

语法详解

∙{{post.title}}相当于$post->title; 

{{post.getTypes().name}}相当于$post->getTypes()->name;

∙{{post['title']}}相当于$post['title'];

∙{{post.title|e}}使用过滤器,竖线左边表达式的值将会作为过滤器的第一个参数; 

{{'%.2f'|format(post.price)}}相当于执行sprintf('%.2f',$post->price);

默认过滤器列表:

Filter

Description

e

AppliesPhalcon\Escaper->escapeHtmltothevalue

escape

AppliesPhalcon\Escaper->escapeHtmltothevalue

escape_css

AppliesPhalcon\Escaper->escapeCsstothevalue

escape_js

AppliesPhalcon\Escaper->escapeJstothevalue

escape_attr

AppliesPhalcon\Escaper->escapeHtmlAttrtothevalue

trim

Appliesthe trim PHPfunctiontothevalue.Removingextraspaces

left_trim

Appliesthe ltrim PHPfunctiontothevalue.Removingextraspaces

right_trim

Appliesthe rtrim PHPfunctiontothevalue.Removingextraspaces

striptags

Appliesthe striptags PHPfunctiontothevalue.RemovingHTMLtags

slashes

Appliesthe slashes PHPfunctiontothevalue.Escapingvalues

stripslashes

Appliesthe stripslashes PHPfunctiontothevalue.Removingescapedquotes

capitalize

Capitalizesastringbyapplyingthe ucwords PHPfunctiontothevalue

lower

Changethecaseofastringtolowercase

upper

Changethecaseofastringtouppercase

length

Countsthestringlengthorhowmanyitemsareinanarrayorobject

nl2br

Changesnewlines\nbylinebreaks(
).UsesthePHPfunction nl2br

sort

SortsanarrayusingthePHPfunction asort

keys

Returnsthearraykeysusing array_keys

join

Joinsthearraypartsusingaseparator join

format

Formatsastringusing sprintf.

json_encode

Convertsavalueintoits JSON representation

json_decode

Convertsavaluefromits JSON representationtoaPHPrepresentation

abs

Appliesthe abs PHPfunctiontoavalue.

url_encode

Appliesthe urlencode PHPfunctiontothevalue

default

Setsadefaultvalueincasethattheevaluatedexpressionisempty(isnotsetorevaluatestoafalsyvalue)

convert_encoding

Convertsastringfromonecharsettoanother

∙for循环用法

基础用法:

{%forrobotinrobots%}

{{robot.name|e}}

{%endfor%}

嵌套循环:

{%forrobotinrobots%}

{%forpartinrobot.parts%}

Robot:

{{robot.name|e}}Part:

{{part.name|e}}

{%endfor%}

{%endfor%}

获取索引值

{%setnumbers=['one':

1,'two':

2,'three':

3]%}

{%forname,valueinnumbers%}

Name:

{{name}}Value:

{{value}}

{%endfor%}

用if进行筛选

{%forvalueinnumbersifvalue<2%}

Value:

{{value}}

{%endfor%}

{%forname,valueinnumbersifname!

='two'%}

Name:

{{name}}Value:

{{value}}

{%endfor%}

else、elsefor

{%forrobotinrobots%}

Robot:

{{robot.name|e}}Part:

{{part.name|e}}

{%else%}{#else也可以写成elsefor#}

Therearenorobotstoshow

{%endfor%}

可以在for结构中使用{%break%}和{%continue%}来跳出和执行下一次循环

∙if条件判断 

基本用法

∙{%ifrobot.type=="cyborg"%}

∙{{robot.name|e}}

∙{%endif%}

∙{%ifrobot.type=="cyborg"%}

∙{{robot.name|e}}

∙{%else%}

∙{{robot.name|e}}(notacyborg)

∙{%endif%}

∙{%ifrobot.type=="cyborg"%}

∙Robotisacyborg

∙{%elseifrobot.type=="virtual"%}

∙Robotisvirtual

∙{%elseifrobot.type=="mechanical"%}

∙Robotismechanical

{%endif%}

if中可以使用的内置变量:

Variable

Description

loop.index

Thecurrentiterationoftheloop.(1indexed)

loop.index0

Thecurrentiterationoftheloop.(0indexed)

loop.revindex

Thenumberofiterationsfromtheendoftheloop(1indexed)

loop.revindex0

Thenumberofiterationsfromtheendoftheloop(0indexed)

loop.first

Trueifinthefirstiteration.

loop.last

Trueifinthelastiteration.

loop.length

Thenumberofitemstoiterate

∙赋值

o单个变量赋值:

o{%setfruits=['Apple','Banana','Orange']%}

{%setname=robot.name%}

▪多个变量赋值:

{%setfruits=['Apple','Banana','Orange'],name=robot.name,active=true%}

o支持的字面值:

字面值

说明

“thisisastring”

被单引号或双引号括起来的内容作为字符串

100.25

带小数部分的数字作为(double/float)

100

不带小数的数字作为整数(integer)

false

静态内容“false”作为布尔值中false

true

Constant“true”isthebooleantruevalue

null

Constant“null”istheNullvalue

数组可以用中括号或花括号定义

{#Othersimplearray#}

{{['Apple',1,2.5,false,null]}}

{#Multi-Dimensionalarray#}

{{[[1,2],[3,4],[5,6]]}}

{#Hash-stylearray#}

{{['first':

1,'second':

4/2,'third':

'3']}}

{%setmyArray={'Apple','Banana','Orange'}%}

{%setmyHash={'first':

1,'second':

4/2,'third':

'3'}%}

算术运算符和比较符与PHP语法中的一致,逻辑运算符为:

or,and,not

∙if中的is测试操作 

内置支持的测试:

Test

Description

defined

Checksifavariableisdefined(isset)

empty

Checksifavariableisempty

even

Checksifanumericvalueiseven

odd

Checksifanumericvalueisodd

numeric

Checksifvalueisnumeric

scalar

Checksifvalueisscalar(notanarrayorobject)

iterable

Checksifavalueisiterable.Canbetraversedbya“for”statement

divisibleby

Checksifavalueisdivisiblebyothervalue

sameas

Checksifavalueisidenticaltoothervalue

type

Checksifavalueisofthespecifiedtype

∙宏定义:

∙{%-macromy_input(name,class="input-text")%}

∙{%returntext_field(name,'class':

class)%}

∙{%-endmacro%}

∙{#Callthemacro#}

∙{{'

'~my_input('name')~'

'}}

{{'

'~my_input('name','input-text')~'

'}}

由以上代码可见,模板中字符串间连接符为~!

∙使用标签助手:

Method

Voltfunction

Phalcon\Tag:

:

linkTo

link_to

Phalcon\Tag:

:

textField

text_field

Phalcon\Tag:

:

passwordField

password_field

Phalcon\Tag:

:

hiddenField

hidden_field

Phalcon\Tag:

:

fileField

file_field

Phalcon\Tag:

:

checkField

check_field

Phalcon\Tag:

:

radioField

radio_field

Phalcon\Tag:

:

dateField

date_field

Phalcon\Tag:

:

emailField

email_field

Phalcon\Tag:

:

numberField

number_field

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1