MVC and Ruby already have renderAction() method, but yii not yet… maybe it’s time? ![]()
MVC and Ruby already have renderAction() method, but yii not yet… maybe it’s time? ![]()
What does it do?
Check this LINK and this LINK
I suppose same as Cake requestAction and ZF has something like that… mostly there is talk how bad they are because use so many resources… but i agree its pretty usefull in many cases where coding a widget is just double work.
It runs a controller action, captures the output and then displays?
That/s write it does the same thing:
Consider an example where in I want to render some UI based on some business logic as a partial within parent UI.
I needed this feature in my current portion of application I am developing. Basically I am rendering a page, while rendering a page, in one of the div I need to load list of folder so I just created a partial load_folder and tried using $this->renderPartial(‘load_folders’), but then I realized that load_folders should be an action so that it can go to DB and fetch folder information from table.
I am stuck here, trying to find some good solution to avoid violating MVC design. Anyone got suggestion?
I’m not test this piece of my code, but maybe something like:
class Controller extends CController {
private $_isChildAction=false;
/**
* @return boolean
*/
public function getIsChildAction(){
return $this->_isChildAction;
}
/**
* @param boolean $value
*/
public function setIsChildAction($value){
$this->_isChildAction=$value;
}
/**
* @param string $actionID
* @param string $controllerID
* @param string $return
* @return null|string
*/
public function renderAction($actionID,$controllerID,$return=false){
if(!strcasecmp($controllerID,$this->getId())){
if(null!==($action=$this->createAction($actionID))){
if(($parent=$this->getModule())===null)
$parent=Yii::app();
ob_start();
if($parent->beforeControllerAction($this,$action)){
$this->runActionWithFilters($action,$this->filters());
$parent->afterControllerAction($this,$action);
}
$output=ob_get_clean();
if($return)
return $output;
else
echo $output;
}
else
$this->missingAction($actionID);
}
else if(null!==($ca=Yii::app()->createController($controllerID.'/'.$actionID))){
list($controller,$actionID)=$ca;
$controller->init();
$controller->setIsChildAction(true);
return $controller->renderAction($actionID,$controllerID,$return);
}
else
$this->missingAction($actionID);
}
}
Is it no option to simply wrap $this->forward($controller, false)?