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 )
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…
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?
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.