Fragen Zu Controller + View

Hallo Zusammen

Ich komme aus der prozeduralen Ecke und bin am OOP lernen.

Ich möchte es gleich richtig lernen. Wie mache ich das elegant? Mein Ansatz ist bestimmt redundant und ineffizient.

Zielverhalten

  • Ich möchte den Guest beim starten der actionProjekt darauf hinweisen das er sich zuerst anmelden muss. Die Auflistungen der Projekt darf er sehen.

  • Der Member soll die actionProject normal ausführen können.

festgestellte Probleme

  • Das data array fülle ich redundant in 2 action ab.

  • irgendwie ist das ganze ein gebastel.

  • Mit den AccessRoules wechselt es die Seite, möchte die Meldung auf der selben seite anzeigen.

Muss ich die Meldung evt. mit jQuery ausgeben?

Testumgebung

www.makebusiness.ch (user: test@test.ch password: demo)

[size="5"]Controller[/size]


	public function actionProject() {

	

		if (Yii::app()->user->isGuest) {


			$msg ="Bitte zuerst anmelden."; 

			$data= TblProjekt::model()->FindAll();  

			$this->render('show', array('var1' => $msg,'typ' => 'alert alert-error','data'=>$data));  // <-- render mit bootstrapmeldung im array

			

		} else { 

    	

   		// ********

   			//  Function die der Member ausführen darf

                // ********

		}

	}

	

	public function actionShow() {


		if (isset($_GET['id'])) {


			$data= TblProjekt::model()->FindAllByAttributes(array('Kategorie'=>$_GET['id']));  

		} else {

			$data= TblProjekt::model()->FindAll();  	

		}

 		

		$this->render('show',array('data'=>$data));


	}

[size="5"]View[/size]




<div>

		<? if (isset($var1)) { 				//<-- Infomeldung oben am Browser

		Echo "<div class=".$typ.">";

		echo $var1; 

		echo "</div>"; }?>

	</div>


	<?  

	$count_items = count($data);


		if($count_items > 0){


		?> <div id="container"> <?

		

	// Durchläuft die Datensätze

    foreach($data as $item) {


Darstellung der Daten


}



Hallo,

du kannst alles im einen action einbauen:




         public function actionProject() {

                

                if (isset($_GET['id']) && !Yii::app()->user->isGuest) {

                        $data= TblProjekt::model()->findAllByAttributes(array('Kategorie'=>$_GET['id']));  

                } else {

                        $data= TblProjekt::model()->findAll();          

                }

        

                if (Yii::app()->user->isGuest) {


                        $msg ="Bitte zuerst anmelden."; 

                        $this->render('show', array('var1' => $msg,'typ' => 'alert alert-error','data'=>$data));  // <-- render mit bootstrapmeldung im array

                        

                } else { 

                        $this->render('show',array('data'=>$data));

                }

        }

oder so:




         public function actionProject() {

                

                if (isset($_GET['id']) && !Yii::app()->user->isGuest) {

                        $data= TblProjekt::model()->findAllByAttributes(array('Kategorie'=>$_GET['id']));  

                } else {

                        $data= TblProjekt::model()->findAll();          

                }


                if (Yii::app()->user->isGuest) {


                        $msg ="Bitte zuerst anmelden.";  

                        $this->render('show', array('var1' => $msg,'typ' => 'alert alert-error','data'=>$data));  // <-- render mit bootstrapmeldung im array

                        

                } else { 

                        $this->show($data);

                }

        }

        

        protected function show($data) {                

                $this->render('show',array('data'=>$data));


        }

Hallo SleepWalker

Genial, du hast mir endlich den gordischen Knoten gelöst.

Vielen Dank.

Grüsse Beat