2016-07-30 24 views
0

Ich möchte meinen Controller Backcode anpassen (Hersteller/cookeph/bake/src/Vorlage/Backen/Vorlage/Backen/Controller/Controller. ctp) Wenn Sie also einen Controller backen, wird automatisch erkannt, ob ein (z. B. Translate-) Verhalten im Modell installiert ist, und Sie fügen "cake \ I18n \ I18n;" an den Controller während des Backens.CakePHP 3 - Wie man das installierte Verhalten in einem Modell beim Backen eines Controllers erkennt

Kann mir also jemand sagen, wie man das installierte Verhalten im Controller-Back-Code erkennt?

+0

Ist Ihnen bewusst, dass dies nur mit Tabellenklassen funktioniert, die beim Backen des Controllers bereits vorhanden sind? Wissen Sie auch, dass Sie benutzerdefinierte Back-Vorlagen in Ihrer Apps-Vorlagenstruktur erstellen sollten? Es liest sich so, als würden Sie die Herstellerdateien ändern. – ndm

+0

Ja, ich weiß, dass ich die benutzerdefinierten Backenvorlagen in src/Template/Bake erstellen muss. Das mache ich schon. – Lucky

+0

Wenn ich neue Tabellen mit übersetzten Feldern erstelle, füge ich die übersetzten Felder als 'i18n_fieldName' hinzu. In Model- und Entity-Back-Dateien überprüfe ich nach Feldern mit 'i18n_' und passe den Code automatisch an, um das Translate-Verhalten hinzuzufügen. Ich möchte das auch in der Controller-Back-Datei machen: Ich sollte "Use Cake \ I18n \ I18n;" im Controller, wenn Felder mit 'i18n_' vorhanden sind oder wenn ein Translate-Verhalten im Modell vorhanden ist ... Beim Backen des Modells können Sie das $ validation-Array nach 'i18n _...' Feldern überprüfen, aber offensichtlich ist das $ validation-Array nicht in der Controller-Back-Datei verfügbar? – Lucky

Antwort

0

Da die Tabellenklasse beim Backen des Controllers bereits vorhanden ist, sollten Sie die erforderlichen Informationen von $modelObj erhalten können, die an die Ansicht übergeben werden. Dies ist eine Instanz der Tabellenklasse, die dem Controller zugeordnet ist.

Die über Table::behaviors() verfügbare Verhaltensregistrierung sollte die Informationen enthalten, die Sie benötigen.

$modelObj->behaviors()->has('Translate') 

Und natürlich können Sie weitere Informationen aus der Tabelle, wie das Schema (Table::schema()), Validierungsregeln (Table::validator()) erhalten, etc ...

Siehe auch

+0

Danke! if ($ modelObj-> behaviors() -> hat ('Translate')) {macht den Trick! – Lucky