在Yii类里面重写了一些逻辑
但是不知道怎么才能向controller中加入数据
我该怎么做?
在Yii类里面重写了一些逻辑
但是不知道怎么才能向controller中加入数据
我该怎么做?
加入数据?你的意思是,建一些变量?
直接声明就可以了吧。
应该说不是,我是想在app已经生成,但是还没有run的时候给controller加入一些成员
extends CController
components/Controller.php文件里声明就行!
这样所有的控制器都可以用
大概只能这样,因为在没有run的时候,控制器还没初始化呢,只能暂存在app或者其他类里面
谢谢各位
我还有一个问题,就是 如果createwebapplication后,不运行run,而是runController($route),这会不会错过什么重要的东西?
虽然在测试中还没有遇到什么问题,但还是有点不放心。
你指的是修改入口文件吗?
是的,在入口处(Yii),修改了一些逻辑,那里有些代码修改route信息(我想一定有更好的办法,而不需要像我这样蛮干)
然后就是runcontroller($route)了
你说一下这样做有什么意图呢?为什么先runController($route)呢?
因为我要把yii当作一个程序的一部分,这个程序在一定的时候调用yii,而不想每调用一次就初始化一次,就通过传递route进行(希望有更好的方式)
run的话我不知道怎么传递route,而runcontroller可以接受route就可以以此为据创建controller调用action了
yii是自动加载类啊!在对象初始化的时候才该类会被包含进来,现在基于PHP5的框架都是autoload,你如果不放心,可以看一下运行的日志就知道了
不是这个意思啦,我是想知道,run()一直运行到runController()之间都做了 除了处理route之外的什么事?。
感觉应该不会出什么事,可能会丢失一些事件。。
我运行index.php以后前几条日志如下:
Loading "log" application component
Loading "request" application component
Loading "urlManager" application component
Loading "cache" application component
Serving "Yii.CUrlManager.rules" from cache
Loading "db" application component
Opening DB connection
…
接下来是model的一些查询日志
…
Loading "clientScript" application component
Loading "user" application component
Loading "session" application component
Loading "assetManager" application component
当处理用户请求时,应用将经历如下声明周期:
1.通过 CApplication::preinit() 预初始化应用;
2.设置类的自动装载器和错误处理;
3.注册核心类组件;
4.加载应用配置;
5.通过 CApplication::init() 初始化应用:
•注册应用行为;
•载入静态应用组件;
6.触发 onBeginRequest 事件;
7.处理用户请求:
•解析用户请求;
•创建控制器;
•运行控制器;
8.触发 onEndRequest 事件。
•解析用户请求;
就是这一步我自己处理了,也许我需要的就是onbeginrequest事件。
然后就是如何在错误发生(如404)后,不是直接运行一个action后退出,而是可以交给其它程序呢?
默认生成的代码的错误页面是site/error,你可以在siteController的actionError里做处理
如果你只是对404页面做处理,那么你可以判断一下
public function actionError()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
error property read-only (available since v1.0.6)
public array getError()
code - the HTTP status code (e.g. 403, 500)
type - the error type (e.g. ‘CHttpException’, ‘PHP Error’)
message - the error message
file - the name of the PHP script file where the error occurs
line - the line number of the code where the error occurs
trace - the call stack of the error
source - the context source code where the error occurs
你可以用$error=Yii::app()->errorHandler->error;
$error[‘code’]去判断错误代码!
直接取好像也没用?
因为最终的处理都传递到errorHandler,可能需要做一下CErrorHandler的继承。
暂时没有其他问题了,接下来面对的可能是效率上的问题。。
感谢 巡洋艦 , 大好人
呵呵,互相帮助啊!刚开始我也遇到了好多问题,大家互相交流一下就会解决了!
又有一个问题,现在的Yii在运行完一个controller后,会进行销毁处理吗?
因为程序里会多次创建controller,如果没有我该怎么进行最后的处理呢?