Yii2 Überschreiben generische create-Aktion im Rest ActiveController
Habe ich eine Rest API in Yii2 und Yii generiert alle Aktionen
Ansicht /aktualisieren /erstellen /löschen
Will ich ändern, das comportement der createMethode et garde, die mit anderen Methoden, SO kann ich nicht die Klasse Controller, sollte ich die Klasse verwenden, ActiveController
Aber ich will, dass die Klasse die gleiche Arbeit tun, muss ich hinzufügen, dass einige Maßnahmen vor dem erstellen und einige Aktionen nach dem erstellen. Also muss ich überschreiben der actionCreate
wie kann ich es tun ?
- wo ist die Frage?
- wie kann ich es tun
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die folgenden
Ich weiß, das ist eine alte Frage, aber ich fand es in eine ähnliche Suche, und dachte, ich könnte eine schöne, aktualisierte Lösung und Zusammenfassung von dem, was ist jetzt hier. Ich hoffe, jemand findet diese hilfreich...
Kenne ich zwei Möglichkeiten, dies zu tun. Definieren Sie eine action-Methode, wie @Roman Podlinov erwähnt, oder definieren Sie die Aktion als eine separate Klasse, und zeigen Sie die Standard-create-Aktion zu, in der Nähe zu dem, was @mrJ0ul3 erwähnt. Ich gebe Beispiele, die unter-der Vollständigkeit halber.
Methode 1 - Aktion-Methode im controller
In die Steuerung, Außerkraftsetzen der
actions
Methode etwa so:Und dann definieren Sie Ihre create-Methode in dem controller.
Und klar zu sein, den Namen der Methode, braucht
actionCreate
wie oben gezeigt. Ich sah einen Kommentar zu erwähnencreateAction
, aber das ist falsch. Sie können immer verwechseln mit derCreateAction
Klasse, die ein Teil des yii - \rest-namespace und enthält den code, der tatsächlich ausgeführt wird mit der Standard-REST create-Aktion. Allerdings, wenn Sie diese Methode zu überschreiben, erstellen Sie Anfrage-Logik, dann ist die Klasse eigentlich egal. Es ist nicht egal, aber für die andere Methode...Methode 2 - separate action-Klasse
Persönlich, ich bevorzuge diese Methode verwenden, um die Standardeinstellung zu überschreiben Aktionen. Ich mag halten die Standard-CRUD-action-Logik aus dem controller selbst. Das macht es schön zu wissen, dass, wenn gibt es action-Methoden in einem controller von mir, dass Sie völlig benutzerdefinierte Aktionen. Dies ist definitiv nur eine persönliche Vorliebe obwohl.
Für diese, erstellen Sie eine neue Klasse-Datei, die sollte code enthalten, der wie folgt aussieht:
Wenn Sie diesen Weg gehen, würde ich empfehlen, Check-out der Körper von Yii ' s REST CreateAction-Klasse und das Modell der progression der code nach Ihr, vorausgesetzt, es macht Sinn, zu tun, so dass für Ihren Fall.
Jetzt musst du nur noch sagen, die Steuerung zu verwenden, diese action-Klasse für die create-action. Sie tun, dass Sie in der Aktionen-Methode der controller-so:
Wie Sie sehen können, es ist ähnlich wie in der syntax zu, was @mrJ0ul3 wurde darauf hindeutet, aber dieser Vorschlag nur verändert, wie ein Teil einer Aktion funktionieren würde. Es nicht erlauben, Sie vollständig zu überschreiben, die Logik der Handlung, die ist, warum es verpasste die Marke auf die Beantwortung der eigentlichen Frage.
Hoffe, das hilft!
-Prost alle! 🙂
/vendor/yiisoft/yii2/rest/CreateAction.php
Es gibt Teile, die mit der Umsetzung einiger standard-REST-Verhalten und ommiting Sie in Ihrem code erstellen können, einige Probleme. Zum Beispiel "access check":if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id); }
oder Last request-body parametes Modell:$model->load(Yii::$app->getRequest()->getBodyParams(), '');
Oder können Sie mit der folgenden Schritt :