zend framework里在某个控制器的某个action中怎么调用其他控制器的某个方法?
比如:在index控制器里有如下方法classIndexControllerextendsZend_Controller_Action{functionindexActi...
比如:在index控制器里有如下方法
class IndexController extends Zend_Controller_Action
{
function indexAction()
{
$m1 = $this->m1();
$m2 = $this->m2();
$this->view->m1 = $m1;
$this->view->m2 = $m2;
}
function m1()
{
$result = array();
查询数据库将结果写进$result
return $result;
}
function m2()
{
$result = array();
查询数据库将结果写进$result
return $result;
}
}
其中m1和m2方法分别获取首页要显示内容的一部分,比如m1获取导航条,m2获取其他数据
现在另外一个news控制器中的indexAction方法也要显示导航条,就是需要调用index控制器里的m1方法,应该怎么写?
class NewsController extends Zend_Controller_Action
{
function indexAction()
{
$m1 = 这里要调用index控制器的m1方法,怎么写代码?
$this->view->m1 = $m1;
}
}
当然,这里导航条只是打个比方,实际不是显示导航条。要显示导航条Zend Framework有专门的组件可以做,没必要这么做。
一个简单的解决方法是把m1方法复制到news控制器里,再像indexAction同样的方法调用,这样代码就重复了,降低了代码复用性。有什么方法能直接调用吗?使用actionStack助手的话,它只能调用以Action结尾的方法。我要调的方法不是Action结尾的。 展开
class IndexController extends Zend_Controller_Action
{
function indexAction()
{
$m1 = $this->m1();
$m2 = $this->m2();
$this->view->m1 = $m1;
$this->view->m2 = $m2;
}
function m1()
{
$result = array();
查询数据库将结果写进$result
return $result;
}
function m2()
{
$result = array();
查询数据库将结果写进$result
return $result;
}
}
其中m1和m2方法分别获取首页要显示内容的一部分,比如m1获取导航条,m2获取其他数据
现在另外一个news控制器中的indexAction方法也要显示导航条,就是需要调用index控制器里的m1方法,应该怎么写?
class NewsController extends Zend_Controller_Action
{
function indexAction()
{
$m1 = 这里要调用index控制器的m1方法,怎么写代码?
$this->view->m1 = $m1;
}
}
当然,这里导航条只是打个比方,实际不是显示导航条。要显示导航条Zend Framework有专门的组件可以做,没必要这么做。
一个简单的解决方法是把m1方法复制到news控制器里,再像indexAction同样的方法调用,这样代码就重复了,降低了代码复用性。有什么方法能直接调用吗?使用actionStack助手的话,它只能调用以Action结尾的方法。我要调的方法不是Action结尾的。 展开
2个回答
展开全部
1、如果IndexController这一个类有调用的话,并且m1是独立方法可以使用 IndexController::m1();
2、改成继承:
class NewsController extends IndexController { //这里可以改成继承IndexController 这一个类
function indexAction(){
$m1 = $this->m1;//跟调用本类方法一样,因为是继承了类
$this->view->m1 = $m1;
}
}
3、global
class IndexController extends Zend_Controller_Action{
function indexAction(){
global $abc;
$abc = &$this;//这里用引用,不是复制,所以不会很消耗资源
}
}
class NewsController extends Zend_Controller_Action{
function indexAction() {
global $abc;
$m1 =$abc->m1;//这里
$this->view->m1 = $m1;
}
}
2、改成继承:
class NewsController extends IndexController { //这里可以改成继承IndexController 这一个类
function indexAction(){
$m1 = $this->m1;//跟调用本类方法一样,因为是继承了类
$this->view->m1 = $m1;
}
}
3、global
class IndexController extends Zend_Controller_Action{
function indexAction(){
global $abc;
$abc = &$this;//这里用引用,不是复制,所以不会很消耗资源
}
}
class NewsController extends Zend_Controller_Action{
function indexAction() {
global $abc;
$m1 =$abc->m1;//这里
$this->view->m1 = $m1;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询