Yii Framework Forum: Render view másik controllerből - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Render view másik controllerből Rate Topic: -----

#1 User is offline   Speeedfire 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 192
  • Joined: 02-March 12

Posted 29 March 2012 - 01:41 PM

Ü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));
        }

0

#2 User is offline   Rajcsányi Zoltán 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 46
  • Joined: 10-November 09
  • Location:Hungary, Zalaegerszeg

Posted 29 March 2012 - 02:19 PM

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 :) )




---
Zoltan Rajcsanyi
homepage: http://ezmegaz.hu
skype: zolones7666

1

#3 User is offline   Speeedfire 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 192
  • Joined: 02-March 12

Posted 29 March 2012 - 02:39 PM

View PostRajcsányi Zoltán, on 29 March 2012 - 02:19 PM, said:

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));

0

#4 User is offline   kiskp 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 14
  • Joined: 05-January 10
  • Location:Hungary

Posted 29 March 2012 - 03:51 PM

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.yiiframew...rPartial-detail
1

#5 User is offline   Speeedfire 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 192
  • Joined: 02-March 12

Posted 30 March 2012 - 07:16 AM

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

Quote

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.


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. :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users