Yii Framework Forum: Verständnisfrage zu Controller und View - Yii Framework Forum

Jump to content

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

Verständnisfrage zu Controller und View Rate Topic: -----

#1 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 19 November 2009 - 05:24 PM

Hallo,
es gut um paar Verständnisfragen zu Controller und Views.

Relationen

1.) Name
id
name

2.) ehemann_ehefrau
mannID
frauID
(hat eine eigene Modelklasse zum Hinzufügen der Relation)

Dafür habe ich die CRUD-Actions definiert und die funktionieren soweit wunderbar
CREATE
UPDATE
DELETE
SHOW
LIST


Nun habe ich eine weitere M:N Verknüpfung zu Name erstellt.
3.) ehemann_nachbar
ehemannID
nachbarID
( hat eigene Modelklasse zum Hinzufügen der Relation )


Meine Verständnisfragen sind nun:
1.) Zum Hinzufügen einer neuer Relation zwischen EHEMANN und NACHBAR habe ich eine actionCreatenachbar erstellt, die dann auf mein VIEW createnachbar verweist. Dort habe ich dann zwei Felder, in denen ich die Namen eintrage und die Beziehung erfolgreich erstellt wird.

Meine Frage ist nun, ob das soweit "richtig" ist. Es hört sich zwar ganz banal an, jedoch würde mich interessieren ob ihr das Problem anders lösen würdet. Die Action actionCreatenachbar hört sich für mich an, als ob sie nicht in den Controller passen würde.


2.) Mein zweite Frage bezieht sich auf das Prüfen der Eingabe und Ausgabe von Fehlermeldungen.
Meine action actionCreatenachbar verweist auf meine View Createnachbar.

Nun habe ich dort zwei Felder wo die Namen eingetragen werden und anschließend in die Relation ehemann_nachbar eingetragen werden.
Wie überprüfe ich nun, im Controller schön ob der eingegeben Name in der Datenbank vorhanden ist und wie gebe ich bei nicht Vorhandensein eine Fehlermeldung an die View zurück?

Bis jetzt sieht der Controller ungefähr so aus, aber dass sieht für mich nicht professional gelöst aus aus.

public function actionCreate()
{
	$model	= new name;
	$model2	= new name;

	if(isset($_POST['language1']))
	{
		$model->attributes = $_POST['name'];

		$aReturn = name::getName( $model->name );
		// Wie gebe ich nun hier eine Fehlermeldung an das View zurück, wenn der Name nicht vorhanden ist?
		// und das für beide Felder?
		$aReturn2 = name::getName( $model2->name );

		$this->redirect(array( 'show', "id" => $aReturn->id));
	}
	$this->render('create',array
		(
			'model'		=> $model,
		)
	);
}


Würde es vielleicht Sinn machen für die Beziehung Ehemann <=> Nachbar einen eigenen Controller zu machen?

Vielleicht habt ihr paar Erfahrungen aus euren Projekten.

mfg
yii
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#2 User is offline   Coksnuss 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 140
  • Joined: 14-May 09

Posted 20 November 2009 - 06:33 AM

Also zu
1.
Denke schon das die Action soweit richtig ist, auch wenn sie für mich jetzt ohne Kenntnis über die Applikation keinen Sinn macht. Aber das ist ja im grundegenommen sowas wie actionRegister, sowas wird ja auch über den Controller geregelt. (Wobei ich micht jetzt frage wofür du die CRUD-Vorlagen erstellt hast)

2.
Die Überprüfung ob der Name schon in der Datenbank vorhanden ist muss vom Model ausgehen.
Das heißt du erweiters dein Model um folgende zwei Methoden:

public function rules()
{
   return array(
      array('name', 'available', 'on' => 'register'),
   );
}

public function available()
{
   if(!$this->hasErrors)
   {
      $model = new User::model()->findByAttributes(array('name' => $this->name));
      
      if($model !== NULL)
         $this->addError('name', 'Dieser Name ist bereits von jemand anderem registriert worden!');
   }
}

0

#3 User is offline   mbi 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 603
  • Joined: 08-May 09

Posted 20 November 2009 - 07:34 AM

View PostCoksnuss, on 20 November 2009 - 06:33 AM, said:

Also zu

2.
Die Überprüfung ob der Name schon in der Datenbank vorhanden ist muss vom Model ausgehen.
Das heißt du erweiters dein Model um folgende zwei Methoden:

public function rules()
{
   return array(
      array('name', 'available', 'on' => 'register'),
   );
}

public function available()
{
   if(!$this->hasErrors)
   {
      $model = new User::model()->findByAttributes(array('name' => $this->name));
      
      if($model !== NULL)
         $this->addError('name', 'Dieser Name ist bereits von jemand anderem registriert worden!');
   }
}



oder kürzer, er benutzt den unique-Validator :P
0

#4 User is offline   Dave 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 187
  • Joined: 09-October 08

Posted 23 November 2009 - 06:21 AM

Ich bau eigentlich nur Widgets. Im Controller werden nur GET/POST Parameter an die entsrpechenden Widgets weitergreicht.

Die Controller dienen bei mir nur der Weiterleitung, haben sonst kaum eigene Logik. Das liegt daran, das ich komponentenbasiert arbeite und keine Lust habe, mich von der MVC Struktur die Darstellung festlegen zu lassen. Zum Beispiel macht es keinen Sinn in jeden Controller die Login Funktionalität einzubauen, nur weil man sich auf jeder Seite einloggen kann.
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