Yii - dynamisch Regeln ändern von controller
Sagen wir mal ich habe ein Produkt, welches eine Farbe. Je nach Produkt-Typ, die Farbe, Feld möglicherweise oder möglicherweise nicht erforderlich.
Wenn die Farbe ist immer erforderlich, würde ich die folgenden in der Produkt-Modell
public function rules()
{
return array(
array('colour', 'required')
);
}
Allerdings möchte ich diese dann dynamisch, je nach Produktart.
Sollte das getan werden, in der Steuerung? Ich könnte mir vorstellen, dass so etwas wie das folgende in der Steuerung:
public function actionOrder() {
//....
if ($product->HasColour) {
//set the colour validation to be required
} else {
//set the colour validation to be not required
}
}
Was ist der beste Weg, dies zu nähern?
Dank
- Wenn es zu einer bestimmten "producttype", also ein Modell, das getan werden sollte, in das Modell.
- Aber was du tust in deinem controller ist auch richtig, wenn Ihr das forminput. Also ich denke, man macht keine Fehler hier.
- Das Modell kennt nicht das Produkt, bis actionOrder() ausgeführt wird, nicht?
- Was soll ich tun der controller? Wie füge ich die Modell ist in der Regel in den controller?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Szenario. Im Modell:
Und in der Steuerung:
So, gewünschten Farbe, wird überprüft werden, wenn das Modell das Szenario ist
hasColour
*
bei der label-tho 🙁Nun $Formular hat zwei Felder.
Ein Ansatz ist die Verwendung einer benutzerdefinierten Gültigkeitsregel. Zum Beispiel die Regel:
Dann der validator-Methode in der gleichen Klasse Modell:
Mehr info: Erstellen Sie Ihre eigenen Gültigkeitsregeln
Wenn Sie mehr tun wollen komplizierte Logik, dann-Szenarien möglicherweise nicht Ihre Bedürfnisse zu befriedigen. Dann können Sie überschreiben die Methode init und alles tun, die Logik, die definieren, Gültigkeitsregeln, da drüben, das hinzufügen der Ergebnisse zu $validationRules-array. Und die in den Regeln () - Methode, die Sie einfach nur wieder das array. Sowas: