首页 > PHP资讯 > PHP培训技术 > PHP开发框架YiiFramework教程(5)URL管理

PHP开发框架YiiFramework教程(5)URL管理

PHP培训技术

在上一篇Yii Framework 开发简明教程(4) Hangman 猜单词游戏实例略去了几个方面的问题,一是配置文件main.php 的 URLManager,二是Controller的基类CComponent ,三是定义View使用的CHtml帮助类。本篇战开介绍URLManager,URL管理。

return array(    
    ...    
    'components'=>array(    
        'urlManager'=>array(    
            'urlFormat'=>'path',    
            'rules'=>array(    
                'game/guess/'=>'game/guess',    
            ),    
        ),    
        
    ),    
);Web应用程序完整的URL管理包括两个方面。首先, 当用户请求约定的URL,应用程序需要解析 它变成可以理解的参数。第二 ,应用程序需求提供一种创造URL的方法,以便创建的URL应用程序可以理解的。对于Yii应用程序,这些通过CUrlManager辅助完 成。

当用path格式URL,我们可以指定某些URL规则使我们的网址更用户友好性。例如,我们可以产生一个短短的 URL/post/100 ,而不是冗长/index.php/post/read/id/100。网址创建和解析都是通过CUrlManager指定网址规则。

要指 定的URL规则,我们必须设定urlManager 应用元件的属性rules:

array(
    ......
    'components'=>array(
        ......
        'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                'pattern1'=>'route1',
                'pattern2'=>'route2',
                'pattern3'=>'route3',
            ),
        ),
    ),
);这些规则以一系列的路线格式对数组指定,每对对应于一个单一的规则。路线(route)的格式必须是有效的正则表 达式,没有分隔符和修饰语。它是用于匹配网址的路径信息部分。还有route应指向一个有效的路线控制器。

规则可以绑 定少量的GET参数。参数的一般格式如下:

ParamName表示GET参数名字,可选 项ParamPattern表示将用于匹配GET参数值的正则表达式。当生成一个网址(URL)时,这些参数令牌将被相应的参数值替换;当 解析一个网址时,相应的GET参数将通过解析结果来生成。

我们使用一些例子来解释网址工作规则。我们假设我们的规则 包括如下三个:

array(
    'posts'=>'post/list',
    'post/'=>'post/read',
    'post//'=>'post/read',<br />)调用$this->createUrl('post/list')生成/index.php/posts。第一个规则适用。    调用$this->createUrl('post/read',array('id'=>100))生成/index.php/post/100。 第二个规则适用。    调用$this->createUrl('post/read',array ('year'=>2008,'title'=>'a sample post'))生成/index.php/post/2008/a%20sample%20post 。第三个规则适用。    调用$this->createUrl('post/read')产生/index.php/post/read。请注意,没有规则适用。</p><p> 总之,当使用createUrl生成网址,路线和传递给该方法的GET参数被用来决定哪些网址规则适用。如果关联规则中的每 个参数可以在GET参数找到的,将被传递给createUrl ,如果路线的规则也匹配路线参数,规则将用来生成网址。</p><p> 如果GET参数传递到createUrl是以上所要求的一项规则,其他参数将出现在查询字符串。例如,如果我们调用$this- >createUrl('post/read',array('id'=>100,'year'=>2008)) ,我们将获 得/index.php/post/100?year=2008。为了使这些额外参数出现在路径信息的一部分,我们应该给规则附加/*。 因此,该规则 post/<id:d+>/* ,我们可以获取网址/index.php/post/100/year/2008 。</p><p> 正如我们提到的,URL规则的其他用途是解析请求网址。当然,这是URL生成的一个逆过程。例如, 当用户请 求/index.php/post/100 ,上面例子的第二个规则将适用来解析路线post/read和GET参数array('id'=>100) (可通 过$_GET获得) 。</p><p> createurl方法所产生的是一个相对地址。为了得到一个绝对的url ,我们可以用前缀 yii"></p><p> 注:使用的URL规则将降低应用的性能。这是因为当解析请求的URL ,[ CUrlManager ]尝试使用每个规则 来匹配它,直到某个规则可以适用。因此,高流量网站应用应尽量减少其使用的URL规则。</p><p> 来看下Hangman中使用的规则 ‘game/guess/<g:w>’=>’game/guess’,</p><p> 也就是将所有类似 /game/guess/xx 全部映射到game/guess 也就是GameController 的 actionGuess 方法,传入GET参数以 g=’x’ 的方式。参照每个字母的链接</p><p> CHtml::linkButton(chr($i),array('submit'=>array</p><p> ('guess','g'=>chr($i))));点击的字母链接为 /game/guess/?g=x 或 /game/guess/x 根据main.php 定义的 urlManager的匹配规则Yii框架调用GameController 的 actionGuess 方法,传入GET参数。这样在actionGuess 就可以通过 $_GET['g']来访问这个参数的值。</p><p> // check to see if the letter is guessed correctly     <br />if(isset($_GET['g'][0]) && ($result=$this->guess($_GET['g'][0]))!==null)     <br />    $this->render($result ? 'win' : 'lose');     <br />else // the letter is guessed correctly, but not win yet     <br />{     <br />    $guessed=$this->getPageState('guessed',array());     <br />    $guessed[$_GET['g'][0]]=true;     <br />    $this->setPageState('guessed',$guessed,array());     <br />    $this->render('guess');     <br />}使用urlManager 也允许自定义规则,或者隐藏 index.php ,具体可以参考Yii开发文档: http://www.yiiframework.com/doc/guide/1.1/zh_cn/topics.url</p> </div> <!--相关文章--> <style type="text/css"> .indexNewList ul li{float:left;margin-left:20px;list-style:none;} .indexNewList h4{font-size:14px;font-style:italic;} #cls-xg{clear:both;font-size:14px;} </style> <!--相关文章--> <div class="more"> <div>上一篇:<a href="http://www.thinksite.cn/show-35-8253-1.html">PHP开发框架YiiFramework教程(6)CComponent组件</a></div> <div>下一篇:<a href="http://www.thinksite.cn/show-35-8255-1.html">PHP开发框架YiiFramework教程(4)Hangman猜单词游戏实例</a></div> </div> </div> </div> <div style="width:250px;border-left:1px solid #eeeeee;float:left;" class="other_div"> <h3 style="border-bottom:1px solid orange;padding-bottom:10px;margin-bottom:10px;">PHP培训技术</h3> <ul> <li><a href="http://www.thinksite.cn/show-35-40207-1.html" target="_blank" title="我知道的php培训机构最清晰的git详情,及其git怎么用">我知道的php培训机构最清晰</a></li> <li><a href="http://www.thinksite.cn/show-35-40206-1.html" target="_blank" title="我最佩服的php培训学校">我最佩服的php培训学校</a></li> <li><a href="http://www.thinksite.cn/show-35-40202-1.html" target="_blank" title="鄙视php,php落伍了,真实情况你知道吗?">鄙视php,php落伍了,真实情</a></li> <li><a href="http://www.thinksite.cn/show-35-40198-1.html" target="_blank" title="合肥php培训计划">合肥php培训计划</a></li> <li><a href="http://www.thinksite.cn/show-35-40197-1.html" target="_blank" title="上海php培训机构倒闭潮">上海php培训机构倒闭潮</a></li> <li><a href="http://www.thinksite.cn/show-35-40196-1.html" target="_blank" title="南京php培训讲师介绍">南京php培训讲师介绍</a></li> <li><a href="http://www.thinksite.cn/show-35-40192-1.html" target="_blank" title="全国php培训汇总大全">全国php培训汇总大全</a></li> <li><a href="http://www.thinksite.cn/show-35-40180-1.html" target="_blank" title="合肥php培训好就业吗?">合肥php培训好就业吗?</a></li> <li><a href="http://www.thinksite.cn/show-35-40179-1.html" target="_blank" title="上海php培训机构多少钱">上海php培训机构多少钱</a></li> <li><a href="http://www.thinksite.cn/show-35-40178-1.html" target="_blank" title="南京php培训排名榜">南京php培训排名榜</a></li> <li><a href="http://www.thinksite.cn/show-35-40177-1.html" target="_blank" title="华东六省一市php培训哪家好?">华东六省一市php培训哪家好?</a></li> <li><a href="http://www.thinksite.cn/show-35-40176-1.html" target="_blank" title="2019年php培训市场发展趋势报告">2019年php培训市场发展趋势报告</a></li> <li><a href="http://www.thinksite.cn/show-35-40172-1.html" target="_blank" title="php是什么?">php是什么?</a></li> <li><a href="http://www.thinksite.cn/show-35-40170-1.html" target="_blank" title="南京php培训哪家强?江苏南京找老王!">南京php培训哪家强?江苏南</a></li> <li><a href="http://www.thinksite.cn/show-35-40169-1.html" target="_blank" title="南京php培训最专业的机构在哪里?">南京php培训最专业的机构在</a></li> <li><a href="http://www.thinksite.cn/show-35-40168-1.html" target="_blank" title="如何分辨出php培训的专业性">如何分辨出php培训的专业性</a></li> <li><a href="http://www.thinksite.cn/show-35-40167-1.html" target="_blank" title="php指定网址跳转代码实例">php指定网址跳转代码实例</a></li> <li><a href="http://www.thinksite.cn/show-35-40166-1.html" target="_blank" title="常用的php正则表达式及语法注解">常用的php正则表达式及语法</a></li> <li><a href="http://www.thinksite.cn/show-35-40164-1.html" target="_blank" title="PHP采集代码实例">PHP采集代码实例</a></li> </ul> </div> </div> <div style="clear:both;"></div> <div class="newsOperat"> <div class="tellYou">本文由欣才IT学院整理发布,未经许可,禁止转载。</div> <div class="agreeBox"><a href="javascript:void(0)" class="agree" data-tag="y"><i></i>支持<span></span><font>17</font></a><a href="javascript:void(0)" class="disagree" data-tag="n"><i></i>不支持<span></span><font>0</font></a></div> <div class="bdsharebuttonbox shareBox" data-tag="share_1"> <a class="more" data-cmd="more"></a> <a class="wx" data-cmd="weixin"></a> <a class="wb" data-cmd="tsina"></a> <a class="zoom" data-cmd="qzone"></a> <a class="tencent" data-cmd="tqq"></a> </div> <script> window._bd_share_config={ "common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"}, "share":{}, "bdCustomStyle":"http://www.thinksite.cn/statics/css/thinksite/index.css" }; with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)]; </script> </div> </div> </div> <script language="JavaScript" src="http://www.thinksite.cn/api.php?op=count&id=8254&modelid=1"></script> <!--<script>--> <!--window.onload=function(){--> <!--// 当高亮css改变时,更改pre的背景颜色--> <!--var editColor=$(".column code").css('backgroundColor')--> <!--$(".column code").parent().css("background",editColor)--> <!--}--> <!--</script>--> <script> $(function(){ var fixxTop = $(".newsOperat").offset().top+87; var winnHei = $(window).height() var currHei; $(window).scroll(function(){ currHei = scrollMyTop(); if(fixxTop < winnHei){ return false }else if(fixxTop > winnHei){ if(currHei < fixxTop-winnHei){ $(".newsOperat,.newsDetail").addClass("on") }else if(currHei > fixxTop-winnHei ){ $(".newsOperat,.newsDetail").removeClass("on") } } }) //点赞效果 $(document).on('click',".agreeBox a",function(){ var voteTips='<div class="vote-tips">+1</div>'; var $this=$(this) var initalNum=$.trim($this.find('font').text()) var nextNum=initalNum*1+1 var id="8254" var tag=$this.attr('data-tag'); if(!$this.parent().hasClass('checked')){ if(id){ $.ajax({ type: "post", url: "http://www.thinksite.cn/index.php?m=content&c=index&a=do_support", data: {id : id,tag : tag,model : 'news'}, dataType: "html", success: function (data) { if(data=='ok') { $this.parent().addClass('checked') $this.addClass('on') $this.append(voteTips) $this.find('font').html(nextNum) setTimeout(function(){ $this.find('.vote-tips').remove() },1000) } } }); } } }) }) </script> <!--footer--> <!--footer--> <div class="footerBox"> <div class="footer container"> <div class="footerTop"> <div class="fTLeft"> <a class="logo_footer"></a> <p>让更多人成为更优秀的互联网工程师</p> <div class="phone_footer"></div> </div> <div class="fTMiddle"> <ul> <li> <a href="http://www.thinksite.cn/list-16-1.html" target="_blank" title="PHP培训课程">PHP培训课程</a> <a href="http://www.thinksite.cn/list-65-1.html" target="_blank" title="HTML5培训课程">HTML5培训课程</a> <a href="http://www.thinksite.cn/list-114-1.html" target="_blank" title="java培训课程">java培训课程</a> <a href="http://www.thinksite.cn/list-39-1.html" target="_blank" title="python培训课程">python培训课程</a> </li> <li> <a href="http://www.thinksite.cn/list-17-1.html" target="_blank" title="讲师团队">讲师团队</a> <a href="http://www.thinksite.cn/list-23-0-1-ids.html" target="_blank" title="学员作品">学员作品</a> <a href="http://www.thinksite.cn/list-86-1.html" target="_blank" title="限时就业">限时就业</a> </li> <li> <a href="http://www.thinksite.cn/list-29-1.html" target="_blank" title="学员拓展">学员拓展</a> <a href="http://www.thinksite.cn/list-27-1.html" target="_blank" title="教学环境">教学环境</a> <a href="http://www.thinksite.cn/list-85-1.html" target="_blank" title="报名流程">报名流程</a> </li> <li> <a href="http://www.thinksite.cn/list-22-1.html" target="_blank" title="新闻资讯">新闻资讯</a> <a href="" target="_blank" title="学员访谈">学员访谈</a> <a href="http://www.thinksite.cn/sitemap.html" target="_blank" title="网站地图">网站地图</a> </li> <li> <a href="http://www.thinksite.cn/list-64-1.html" target="_blank" title="关于我们">关于我们</a> <a href="http://www.thinksite.cn/list-38-1.html" target="_blank" title="就业合作">就业合作</a> </li> </ul> </div> <div class="fTRight"> <a><img src="http://www.thinksite.cn/statics/images/thinksite/ewm.png"> <p>欣才学院微信公众号</p> </a> </div> </div> <div style="text-align:center;margin-top:10px;">欣才IT学院为小伙伴们提供专业<a href="http://www.thinksite.cn"><strong style="color:orange;">PHP培训</strong></a>、<a href="http://www.thinksite.cn"><strong style="color:orange;">python培训</strong></a>、<a href="http://www.thinksite.cn"><strong style="color:orange;">java培训</strong></a>、<a href="http://www.thinksite.cn"><strong style="color:orange;">HTML5培训</strong></a>让更多人成为更优秀的互联网工程师!期待您的到来!</div> <div class="footerBottom">Copyright©2008-2020 <a href="http://beian.miit.gov.cn" target="_blank" rel="nofollow">苏ICP备11039863号-2</a> <script type="text/javascript" src="./statics/js/thinksite/cnzz.js"></script> <br/> 版权所有:南京甘池软件科技有限公司 </div> </div> </div> <script src="http://www.thinksite.cn/statics/js/thinksite/baidu_js_push.js"></script> <script type='text/javascript' src='http://tb.53kf.com/kf.php?arg=10004241&style=1'></script> <!--留言弹出层--> <!--反馈--> <script language='javascript' src='http://www.thinksite.cn/index.php?m=formguide&c=index&a=show&formid=27&action=js&siteid=1'></script></body> </html>