Render view másik controllerből

Üdv,

adott egy controller legyen valami. Ebben amikor renderelem a view részt egy másik controller view részét is szeretném renderelni, hogy lehet ez kivitelezni?

A renderpartialt néztem, de nem akar így menni.


public function actionView($id)

	{

                $extra = new MasikController;

		$this->render('view',array(

			'model'=>$this->loadModel($id)

		));

                $this->renderPartial('//masikcontroller/_view', array('data'=>$extra, 'id'=>$id));

        }

A MasikController id-jét is én adom/adnám meg neki.

Szerk.: Így megy csak épp nem jó helyre rakja az adatokat. Konkrétan a body végére. :(


public function actionView($id)

	{

                $extra = MasikModel::model()->findByPk($id);

		$this->render('view',array(

			'model'=>$this->loadModel($id)

		));

                $this->renderPartial('//masik/_view', array('data'=>$extra));

        }

Tudtommal a kontroller arra hivatott, hogy feldolgozzon egy esemény sorozatot, illetve elkapjon egy eseményt.

A mostani MVC tudásommal nem illik bele az MVC filozófiájába az, hogy kontrollerekből kontrollereket hívjunk meg.

Olyat szoktak a Yii-ben, hogy egy másik controller view részét jelenítik meg, illetve több modellt vonnak össze. Erre vannak is példák, illetve alkalmazom is.

Ha egy üzleti logikát több kontrollerben akarok felhasználni, akkor nem a CController osztályból hívom, hanem leszármaztatok egy másik osztályt, és akkor mind a kettő használja a közös őst. De feladattól függően meg lehet máshogy is ezt oldani.

Ha viszont modell-eket hívogatsz azt sem az action-ban láttam eddig, hanem a view-ba teszik. (de még én is newbie vagyok :) )

Na, ezzel a view-al már jó helyre rakja az adatokat és oda, ahova én szeretném. Kezdő MVC és yii felhasználó vagyok még. :)


$extra = MasikModel::model()->findByPk($model->id);

$this->renderPartial('//masik/_view', array('data'=>$extra));

Igen, én is épp javasolni akartam, hogy a view file-ba tedd bele a renderPartial-t, így nem fogja a body végére rakni a //masik/_view tartalmát.




// ez mehet a controller-be, nem szükséges, hogy a view file-ban legyen

$extra = MasikModel::model()->findByPk($model->id);


// ez meg menjen a "fő" controller view file-jába

$this->renderPartial('//masikcontroller/_view', array('data'=>$extra, 'id'=>$id));



Alternatív megoldásként csinálhatod azt is, hogy a fő controllerben, hívod meg a renderPartial-t is, csak épp $return=true paraméterrel




// fő controller

public function actionView($id)

{

    $extraModel = MasikModel::model()->findByPk($id);

    $this->render('view',array(

        'model'=>$this->loadModel($id)

        'extraView'=>$this->renderPartial('//masik/_view', array('data'=>$extraModel), true);

    ));

}



Nyilván ebben az esetben a fő controller view file-jában kell, hogy legyen egy $extraView nevű változód is, ami majd a //masik/_view nézet $data változó(i)t tölti fel az $extraModel tartalmával.

Elképzelhető, hogy a renderPartial() függvény meghívásakor a $return paraméter mellett a $processOutput paraméter-t is true-ra kell állítani, főleg ha a //masik/_view nézetben is használsz dinamikusan beágyazott dolgokat )pl.: registerClientScript és társa, vagy ajax hívásokat…

http://www.yiiframework.com/doc/api/1.1/CController#renderPartial-detail

Az alternatív megoldás 2. felét nem igazán értem.

Illetve arra van megoldás, hogy én a controllerben declarálok mondjuk 4 modellt és azt egy tetszőleges fájlban dolgozom fel? Hogy tudom az adatokat fülön szeparálni?

Gondolok itt arra pl, hogy a controllerben van

$elsomodel, $masodikmodel, $harmadikmodel, $negyedikmodel

De ezeket a view-ban akár össze-vissza, vagy akár többször is ki tudjam iratni?

Szerk.: Közben rájöttem, hogy hülyeséget kérdezek, mert a nevek azok lesznek amit megadok neki a rendernél. Így akárhonnan eltudom már érni bármelyik adatot. :)