Verständnisfrage zu Controller und View

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

Also zu

[size="4"]1.[/size]

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)

[size="4"]2.[/size]

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:

[PHP]

public function rules()

{

return array(

  array('name', 'available', 'on' =&gt; 'register'),

);

}

public function available()

{

if(!$this->hasErrors)

{

  &#036;model = new User::model()-&gt;findByAttributes(array('name' =&gt; &#036;this-&gt;name));


  


  if(&#036;model &#33;== NULL)


     &#036;this-&gt;addError('name', 'Dieser Name ist bereits von jemand anderem registriert worden&#33;');

}

}

[/PHP]

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

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.