仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 911|回复: 18
打印 上一主题 下一主题

[学习教程] PHP编程:yii框架源码剖析之创立controller代码

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:37:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
理解动态语言的概念,运做机制,熟悉PHP语法   利用yii框架的url途径普通形如hostname/?r=xxxx/xxxx/xxxx&sdfs=dsfdsf

咱们可以看到有时会利用protected目次下的controller,有时会利用module中controller,详细是若何处置的呢,请看以下的剖析:

以下代码摘自yii框架中心代码%Yiiroot%/framework/web/CWebApplication.php
复制代码 代码以下:
=================================================================================================
//1.runController是履行一个controller的办法,$route是$_GET['r']
public function runController($route)
{
//在这里挪用createController先去创立一个controller实例,因而可知createController是选择controller的关头
if(($ca=$this->createController($route))!==null)
{
list($controller,$actionID)=$ca;
$oldController=$this->_controller;
$this->_controller=$controller;
$controller->init();
$controller->run($actionID);
$this->_controller=$oldController;
}
else
throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".',
array('{route}'=>$route===''?$this->defaultController:$route)));
}
==================================================================================================
//2.接上去咱们剖析createController,假定咱们会见的route是site/contact
public function createController($route,$owner=null)
{
//初次进入这个函数,$owner参数为空
if($owner===null)
$owner=$this;
//假如$route参数中不含/,那末利用默许的controller
if(($route=trim($route,'/'))==='')
$route=$owner->defaultController;
$caseSensitive=$this->getUrlManager()->caseSensitive;
//为了可以完全运转上面的轮回,给$route前面加一个/
$route.='/';
//将/的地位保留在$pos中
while(($pos=strpos($route,'/'))!==false)
{
//$id是前半局部,即site
$id=substr($route,0,$pos);
if(!preg_match('/^\w+$/',$id))
return null;
if(!$caseSensitive)
$id=strtolower($id);
//$route酿成后半局部,即contact
$route=(string)substr($route,$pos+1);
//controller根目次或子目次前缀
if(!isset($basePath)) // first segment
{
//初次进入,$owner为空,没有这个成员变量
//非初次进入或$owner有值,有能够设置了这个成员变量,拜见CWebModule类
if(isset($owner->controllerMap[$id]))
{
return array(
Yii::createComponent($owner->controllerMap[$id],$id,$owner===$this?null:$owner),
$this->parseActionParams($route),
);
}
//假如能经由过程getModule办法获得到一个自力模块,则再次挪用createController,合用于site是module名的情形,参考protected/config/main.php设置装备摆设文件,例如你的controller在%webroot%/protected/module/site/controller/ContactController.php
if(($module=$owner->getModule($id))!==null)
return $this->createController($route,$module);
//controller的目次:
//关于CWebApplication,对应config['basePath'](拜见设置装备摆设文件)./controller/,例如你的controller在%webroot%/protected/controller/SiteController.php
//关于CModule的子类,对应改子类地点文件夹./contoller/,例如你的controller在%webroot%/protected/module/site/controller/ContactController.php
$basePath=$owner->getControllerPath();
$controllerID='';
}
else
$controllerID.='/';
$className=ucfirst($id).'Controller';
$classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php';
//假如$classFile存在,依据下面所失掉的controller类文件途径,创立类实例
//假如不存在,则是子目次下的controller,持续轮回寻觅终究的controller,例如你的controller在%webroot%/protected/controller/somedir/SiteController
if(is_file($classFile))
{
if(!class_exists($className,false))
require($classFile);
if(class_exists($className,false) && is_subclass_of($className,'CController'))
{
$id[0]=strtolower($id[0]);
return array(
new $className($controllerID.$id,$owner===$this?null:$owner),
$this->parseActionParams($route),
);
}
return null;
}
$controllerID.=$id;
$basePath.=DIRECTORY_SEPARATOR.$id;
}
} 
怎么培养啊 别光说不练啊,好 ,比如新人入门自己步是配置环境,虽然现在都有很多的集成环境,但是真实的体验下配置环境还是会有很多帮助,不论是你以后工作还是在真实的linux下开发。
不帅 该用户已被删除
沙发
发表于 2015-2-4 03:53:21 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-2-9 15:00:44 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
再现理想 该用户已被删除
地板
发表于 2015-2-27 07:48:24 | 只看该作者
爱上php,他也会爱上你。
若天明 该用户已被删除
5#
发表于 2015-3-8 23:47:10 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
小魔女 该用户已被删除
6#
发表于 2015-3-10 00:47:36 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
爱飞 该用户已被删除
7#
发表于 2015-3-11 04:39:27 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
谁可相欹 该用户已被删除
8#
发表于 2015-3-11 23:15:09 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
兰色精灵 该用户已被删除
9#
发表于 2015-3-13 00:37:51 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
海妖 该用户已被删除
10#
发表于 2015-3-17 19:01:23 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
再见西城 该用户已被删除
11#
发表于 2015-3-25 03:30:00 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
莫相离 该用户已被删除
12#
发表于 2015-4-1 07:21:25 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
第二个灵魂 该用户已被删除
13#
发表于 2015-4-3 11:46:09 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
灵魂腐蚀 该用户已被删除
14#
发表于 2015-4-11 08:09:54 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
透明 该用户已被删除
15#
发表于 2015-4-14 16:17:58 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
因胸联盟 该用户已被删除
16#
发表于 2015-5-6 10:12:12 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
分手快乐 该用户已被删除
17#
发表于 2015-5-11 21:16:52 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
简单生活 该用户已被删除
18#
发表于 2015-6-15 22:32:15 | 只看该作者
实践是检验自己会不会的真理。
小女巫 该用户已被删除
19#
发表于 2015-6-22 06:07:42 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 13:57

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表