如何在yii的controller中调用外部action
2个回答
展开全部
下面我们要做的是,将actionHello形成一个单独的类,在TestController中调用它。
1. 建立wwwroot/blog/controllers/test/目录
目录名定为test是yii推荐的写法,建议action所在的目录与对应的controller同名,当然不这样也没有关系。
2.在test目录中创建HelloAction.php文件。
文件内容如下:
[php] view plaincopy
<?php
class HelloAction extends CAction{
public function run($name='ball'){
echo "Hello $name";
}
}
注意:
1.此类一定要继承自CAction类
2.必须有run方法供外部调用
3.run方法的参数,即为url中的请求参数。当然也可以通过$_GET的方式在函数内部取得
详见http://www.yiiframework.com/doc/guide/1.1/en/basics.controller#action一节中的Action Parameter Binding
3.修改TestController.php
[php] view plaincopy
<?php
class TestController extends Controller {
public function actions(){
return array('hello'=>array(
'class'=>'application.controllers.test.HelloAction',
)
);
}
}
好了,看看我们的成果吧,访问:
http://www.example.com/blog/index.php?r=test/hello&name=xuan
页面显示:
hello xuan
注:
对于'class'=>'application.controllers.test.HelloAction'在官方例子中你也许会看到类似'class'=>'HelloAction'的写法。
不要困惑,其实目的是一样。本例中之所以写为“application.controllers.test.HelloAction”,是因为test目录不在yii自动加载范畴。
如果之前有导入:Yii::import('application.controllers.test.*');
那么'class'=>'HelloAction'就可以正常工作了。
1. 建立wwwroot/blog/controllers/test/目录
目录名定为test是yii推荐的写法,建议action所在的目录与对应的controller同名,当然不这样也没有关系。
2.在test目录中创建HelloAction.php文件。
文件内容如下:
[php] view plaincopy
<?php
class HelloAction extends CAction{
public function run($name='ball'){
echo "Hello $name";
}
}
注意:
1.此类一定要继承自CAction类
2.必须有run方法供外部调用
3.run方法的参数,即为url中的请求参数。当然也可以通过$_GET的方式在函数内部取得
详见http://www.yiiframework.com/doc/guide/1.1/en/basics.controller#action一节中的Action Parameter Binding
3.修改TestController.php
[php] view plaincopy
<?php
class TestController extends Controller {
public function actions(){
return array('hello'=>array(
'class'=>'application.controllers.test.HelloAction',
)
);
}
}
好了,看看我们的成果吧,访问:
http://www.example.com/blog/index.php?r=test/hello&name=xuan
页面显示:
hello xuan
注:
对于'class'=>'application.controllers.test.HelloAction'在官方例子中你也许会看到类似'class'=>'HelloAction'的写法。
不要困惑,其实目的是一样。本例中之所以写为“application.controllers.test.HelloAction”,是因为test目录不在yii自动加载范畴。
如果之前有导入:Yii::import('application.controllers.test.*');
那么'class'=>'HelloAction'就可以正常工作了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询