Symfony Best Practices (offizielle Empfehlung)
Webagentur » Digitale Nachrichten » Symfony Best Practices (offizielle Empfehlung)

Symfony Best Practices (offizielle Empfehlung)

Vor einigen Tagen hat Fabien Potencier via Sensio ein E-Book vorgestellt, das Best Practices und Empfehlungen für die Entwicklung eines Symfony-Projekts zusammenfasst. Dieses Dokument wurde aus Empfehlungen zusammengestellt, die von der Community gepostet wurden. Der Zweck dieses Dokuments besteht darin, eine Reihe von Ratschlägen in Bezug auf pH zu gebeniloSophia von Symfony. Ich werde versuchen, die in diesem Beitrag auf Englisch beschriebenen 31 Tipps kurz zusammenzufassen.

Einleitung

Dieses Dokument beginnt mit einigen Ratschlägen und einigen Sätzen, die uns mit dem Dokument inspirieren sollen.

"Dieses Dokument ist kein Tutorial"

Dieses Dokument wurde mit der Absicht geschrieben, von allen Symfony-Entwicklern gelesen zu werden. Sowohl Experten als auch Neulinge.

„Refaktorisieren Sie Ihre Apps nicht“

Am Anfang des Dokuments wird ausdrücklich erklärt, dass wir nach dieser Lektüre unsere Anwendungen nicht aktualisieren und umgestalten sollten, damit sie perfekt zu den zahlreichen Empfehlungen von Sensio passen. Wir können daher sofort die Verbindung zu den ersten im Dokument entwickelten Ideen herstellen: Diese guten Praktiken sollten es uns ermöglichen, unser Leben zu vereinfachen, sowie die Codeüberprüfung zu vereinfachen. Um meine Bemerkungen zu stützen, werden drei Gründe angeführt:

  • Ihre bestehenden Anwendungen sind nicht falsch, sie folgen nur anderen Richtlinien;
  • Ein vollständiges Refactoring der Codebasis neigt dazu, Fehler in Ihre Anwendungen einzuführen;
  • Der dafür aufgewendete Arbeitsaufwand könnte besser darauf verwendet werden, Ihre Tests zu verbessern oder Funktionen hinzuzufügen, die den Endbenutzern einen echten Mehrwert bieten.

Erstellen Sie ein Projekt

In Kapitel 2, das sich mit dem Deklarieren und Erstellen eines Symfony-Projekts befasst, wird ein erstes „Best Practice“ gegeben:

_Verwenden Sie immer Composer. _Composer führte die Grundlagen des modernen PHP durch seine Abhängigkeitsauflösung ein. Dank ihm werden die Abhängigkeiten in der Datei registriert composer.json wird aufgelöst und in Ihr Projekt zurückgeführt, damit es nutzbar ist. Darüber hinaus können einfache Updates vorgenommen werden.

Auf diese Weise können Sie die strukturelle Organisation eines Symfony-Projekts respektieren. (siehe Seite 8).

exemples:

  • Anwendung/Cache speichert den Cache;
  • App/Protokolle Protokolle speichern;
  • App/Ressourcen speichert die Vorlagen sowie die globalen Übersetzungen für Ihre Anwendung;
  • src / Speichern Sie Ihre Anwendungspakete;
  • Verkäufer/ Speichern Sie die Abhängigkeiten Ihres Projekts;
  • Netz/ speichert die Assets (css, js, Bilder usw.) sowie die Front-Datei (app.php), sodass Sie Ihre Anfragen anschließend an Ihre Controller weiterleiten können.
    Als Ergebnis eine neue Empfehlung für Bundles. Ohne meine eigene Analyse durchzuführen, die den pH-Wert in Frage stellen könnteilosophie von Symfony (was ich nicht will), hier die Empfehlung:

Erstellen Sie ein einzelnes AppBundle-Bundle für eine Anwendung. Dies liegt an der Art und Weise, wie Symfony entwickelt wurde. Jedes Paket muss _eigenständig sein. _Sie sollen deshalb selbstständig und unabhängig leben können.

Ich überlasse es Ihnen, über diese Empfehlung nachzudenken …

Konfiguration

Das dritte Kapitel gibt uns Ratschläge zur Konfiguration seiner Anwendung. Einige Konfigurationselemente können von einem Entwicklungssystem zu einem Produktionssystem variieren.

Wie die Empfehlung zeigt, müssen Sie daher Definieren Sie die Konfiguration bezüglich Ihrer Infrastruktur in der Datei app/config/parameters.yml.

Umgekehrt wird die für Ihr Projekt spezifische Konfiguration, die statisch sein wird, in deklariert app/config/config.yml.

Außerdem die Datei parameter.yml sollten nicht versioniert werden. Dies ist die Datei parameter.yml.dist wer sollte sein. Diese Datei bietet Ihnen grundlegende Optionen zum Konfigurieren Ihrer Anwendung. (Empfehlung Seite 12).

Als Ergebnis wird die Datei _app/config/config.yml _an sich dient als Empfehlung.

Legen Sie die Konfiguration für Ihre Anwendung in app/config/config.yml fest
Dieser Empfehlung folgend ist es jedoch ratsam, eine Datei zu erzeugen config.yml, config_dev.yml und eine Datei config_prod.yml. Diese Dateien sollen die für die Entwicklungsumgebung und die Produktionsumgebung spezifischen Konstanten speichern.
Wir müssen einen Wert als konstant betrachten, wenn sich sein Wert nur sehr wenig ändert.

Abhängigkeitsspritze

Hier sind wir ! Im dritten Kapitel wird eine Empfehlung zur Verwendung von Abhängigkeiten detailliert. Ich rate Ihnen, diese Empfehlung zu lesen, wenn Ihnen meine Erklärung vage erscheint.

Bei dieser Empfehlung geht es darum, Dienste in Dienste einzufügen. Sensio empfiehlt, diese in einer Datei zu deklarieren src/AppBundle/Resources/config/services.yml.

Ich lade Sie auch ein, meinen Artikel über die Abhängigkeitsinjektion und die Einschränkung der Verwendung des Super-Service-Containers zu lesen.

Deklarieren Sie die interne Logik

Kapitel 4 befasst sich mit der Organisation Ihrer Bewerbung. Je nach Bedarf unterscheidet sich die Organisation. Für globale und nicht geschäftliche Funktionen empfiehlt Sensio, sie in einem Ordner zu platzieren Utils oder nehmen Sie sie einfach aus Ihrem Bündel und legen Sie sie in einen separaten Ordner. Anschließend wird dringend empfohlen, dass Sie Ihre Klasse als Dienst deklarieren. Eine neue Empfehlung wird gegeben, um uns zu helfen, sie zu deklarieren.

Der Name Ihres Dienstes sollte so kurz wie möglich sein, idealerweise ein einzelnes Wort.

Auswahl des Dateiformats

Da ich dem Yaml-Format innerhalb von Symfony besonders verbunden bin, stelle ich mir vor, dass dieser Punkt Zwietracht hervorrufen wird. Sensio empfiehlt kompromisslos die Verwendung des Yaml-Formats innerhalb von Anwendungen. Die entwickelten Bundles werden zwischen zwei Formaten geteilt: XML und Yaml.

Sensio hat sich entschieden, letzteres zu empfehlen, einfach weil es mehr ist " benutzerfreundlich ". Die Verwendung eines anderen Formats würde die Funktionsweise Ihrer Anwendung nicht ändern.

Definieren Sie keine Variable für die Deklaration Ihrer Dienste

Dies ist eine Praxis, die Sie in bestimmten Bündeln häufig sehen werden, und dennoch warnt Sensio Sie. Hier ist das Beispiel in der Kochbuch :

1
2
3
4
5
6
7
8
#app/config/services.yml
# Service definition mit Klassennamensraum als Parameter
Parameter:
slugger.class: AppBundleUtilsSlugger
Leistungen:
Schläger:
Klasse:
„%slugger.class%“

Hier ist das Beispiel eines nutzlosen Codes. Das Deklarieren der Klasse, die für einen Dienst verwendet werden soll, ist ein Fehler, da diese Variable möglicherweise an anderer Stelle im Code verwendet werden könnte. Außerdem, und das ist die Begründung von Sensio, belastet es die Erstellung des Dienstes.

Die Wahl von ORM

Sensio empfiehlt die Verwendung des Doctrine ORM innerhalb von Symfony. Als Doctrine-Benutzer ist die Integration in Symfony sehr weit fortgeschritten. Daraus ergibt sich eine Empfehlung, die die logische Organisation unserer Projekte neu belebt. Die Entitätsdeklaration muss die Logik innerhalb eines Bündels halten. Siehe Beispiel auf Seite 18.

Deklaration des Mappings

Die Deklaration des Doctrine-Mappings sollte vorzugsweise unter Verwendung der Annotationen erfolgen, die im Rahmen von Doctrine aber auch für andere Anwendungen empfohlen werden.

Verwenden Sie Anmerkungen, um die Entitätszuordnung zu deklarieren.
Ein Beispiel finden Sie auf Seite 19.

Einbau von Einbauten

Sensio rät, ohne es vorwegzunehmen, Fixtures aufzustellen. Für Uneingeweihte sind dies Datensätze, die standardmäßig zum Starten der Anwendung verwendet werden, bevor sie überhaupt in Produktion gehen.

Codierungsstandards (Ende von Kapitel 4)

Dies ist ein Teil, den Sensio seltsamerweise fast in den Schatten gestellt hat. Ich sage seltsam, da es ein wichtiger Teil für mich ist.

Symfony ist gemäß den PSR1- und PSR2-Standards codiert. Diese Standards müssen innerhalb der Community der Symfony-Entwickler, aber auch bei PHP-Entwicklern gefördert werden. Symfony hat einen Artikel veröffentlicht, um die " Coding Standards ". Der Leiter von Sensio, Fabien Potencier, hat ebenfalls ein Tool auf GitHub bereitgestellt, um die Einhaltung von Standards zu überprüfen.

Controller

Wenn es um Controller geht, ist Symfonys philosophie „dünne controller und fette modelle“. Das bedeutet, dass Controller leicht bleiben sollten. Jede Methode (Aktion), auf die über eine Route zugegriffen wird, repräsentiert eine Aktion. Der Code für jede dieser Methoden muss "leicht" sein und Aktionen aufrufen und koordinieren. Diese Anteile müssen sich in Diensten befinden.

Dieses Modell stellt einen Controller dar, der Anwendungscodes/Teile verwendet.

Ein Controller muss einige Regeln befolgen

  • Ein Controller darf maximal 5 Variablen haben.
  • Ein Controller hat maximal 10 Aktionen.
  • Jede Aktion darf maximal 20 Zeilen enthalten.
    • Eine Methode kann mehr als 20 Zeilen enthalten, sofern der verwendete Code nicht faktorisiert werden kann.

      Ein Controller sollte den FrameworkBundle-Basiscontroller von Sensio erben und Anmerkungen verwenden, um Routen, Caching und Sicherheit zu verwalten.

      Die Verwendung von Annotationen wird empfohlen, aber auch die Verwendung von XML, YAML oder PHP ist zulässig. Die Anwendung sollte nur ein einziges Format verwenden.

Verwenden Sie nicht die @Template

Dies ist eine Empfehlung für das weniger Unerwartete und doch ist die Erklärung besonders kraftvoll.

Verwenden Sie nicht die Annotation @Template(), um die vom Controller verwendete Vorlage zu konfigurieren
Die Erklärung ist einfach, das @Template verwendet einen TemplateListener, der aufgerufen wird, wenn das Ereignis kernel.view ist geworfen.
Während der Erstellung dieses Dokuments wurde ein Test durchgeführt. Die Verwendung von @Template dauert 26 ms, bevor die Generierung gestartet wird, während für dieselbe Seite, die mit " $this->rendern(…) », die Wartezeit von 5 Millisekunden.

Verwenden Sie die ParamConverter-Annotation

Die Verwendung dieser Anmerkung ermöglicht es, die Hydratation einer Entität zu automatisieren.

Die Verwendung des ParamConverter-Tricks ist gut, wenn er einfach und bequem ist.

Template

Kapitel 6 beschreibt die Vorlagengenerierung. Es ist ohne _Aufhebens _, was uns das Dokument im Gefolge mehrerer Empfehlungen gibt.

  • Verwenden Sie die Twig-Vorlagen-Engine
    Sensio empfiehlt Twig aus vielen Gründen. Abgesehen davon, ein Sie weit verbreitet von der PHP-Community, sowohl von PHP-Entwicklern von Grund auf neu, nur von Symfony-Entwicklern und anderen Frameworks. Einfachheit wird betont und die Werbung für ihr Produkt ist deutlich sichtbar. Schließlich garantiert Sensio Unterstützung für Symfony bis zu seiner Version 3. Sie können auch die ersten Übergänge finden, die Sie vornehmen müssen, um Ihren Code für die Migration auf Version 3 vorzubereiten.
  • Speichern Sie Anwendungsvorlagen in App/Ressourcen/Ansichten.
    Standardmäßig haben sich Entwickler daran gewöhnt, ihre Vorlagen im Ordner zu speichern Downloads jedes Bündels. Das ist keine schlechte Sache, aber Fabien Potencier empfiehlt, die globalen Vorlagen für Ihre Anwendung in dem oben genannten Ordner zu speichern.
  • Definieren Sie Ihre Twig-Erweiterungen in AppBundle/Twig und Konfigurieren Sie die Dienste in app/config/services.yml.
    Zweigverlängerungen leiden unter schlechter Sichtbarkeit. Diese Erweiterungen, so nützlich sie auch sein mögen, werden manchmal zu systematisch verwendet. Sensio präsentiert diesen Teil, den ich für wesentlich halte, als eine Möglichkeit, Geschäftscode in seine Vorlagen einzufügen. Ich empfehle Ihnen zu lesen, wie man eine Twig-Erweiterung deklariert.

Online Formulare

Kapitel 7 gibt uns Anweisungen zur Verwendung von Formularen.

  • Definieren Sie Ihre Formulare in PHP-Klassen.
    Symfony bietet die Möglichkeit, PHP-Klassen zu generieren, die die automatisierte Generierung von Formularen für bestimmte Entitäten ermöglichen. DER Online Formulare wie sie genannt werden, bietet vollständige Integration. Die Modifikation von Entitäten wird unterstützt. Darüber hinaus ermöglicht die Verwendung von Forms, die Verwaltung von Formularen aus Vorlagen auszulagern.
  • Deklarieren Sie keine Schaltfläche, um ihr Formular zu senden.
    Dies ist ein überraschender Punkt, da dieses Feature in Symfony 2.5 eingeführt wurde. Zum Zeitpunkt des Schreibens dieser Zeilen befindet sich Symfony 2.6 im Aufnahmeprozess und ist daher noch nicht offiziell freigegeben. Wir können daher einige Fragen zur Nützlichkeit dieser Funktionalität aufwerfen, sie sollte nicht verwendet werden!Fügen Sie Schaltflächen in Vorlagen statt in Formularen hinzu, warum?
    In seiner Erklärung erklärt das Sensio-Team, dass diese Funktion zwar erhalten bleibt "benutzerfreundlich" und dass es die Implementierung von Formularen vereinfacht, bleiben bestimmte Funktionalitäten eingeschränkt.
    Beispiel, wenn Sie eine Schaltfläche vom Typ hinzufügen abschicken mit einem "Create"-Label kann dieses Formular nicht für eine Bearbeitungsseite wiederverwendet werden. Sie müssen Ihr Formular dann als Dienstleistung deklarieren, um eine Erbschaft durchzuführen, was weiter unten nicht empfohlen wird.
  • Verwenden Sie keine Twig-Funktionen bilden() und _formStart().
    Es wurde ein Teil eingerichtet, der dem Rendern von Vorlagen gewidmet ist. Sie lehrt uns, dass die Verwendung von Twig funktioniert bilden() Und _ form_start()_ ist veraltet. Auch dies ist für mich ein Fehler, da diese Funktionen erst seit kurzem verfügbar sind.
    In Symfony gibt es mehrere Möglichkeiten, ein Formular zu rendern. Von den verschiedenen Rendering-Methoden ist die beste Methode, die maximale Flexibilität bietet.
    Die Verwendung der oben aufgeführten Twig-Funktionen bringt wenig Nutzen. Sensio spricht von erhöhter Lesbarkeit bei der Verwendung von nativen HTML-Tags. Trotz dieses Arguments stellt dies einen kleinen Vorteil dar… Sehr klein!

Deklarieren Sie Ihre Formulare als Dienste

Formulare sind PHP-Klassen, was bedeutet, dass sie als Dienst deklariert werden können. Sie können diese Methode in den Bundles von sehen FriendsOfSymfony. Diese Methode wird von Sensio nicht empfohlen, außer in bestimmten Fällen, die ich unten zitiere:

  • Wenn Sie vorhandene Formulare wiederverwenden möchten. Das Einrichten der Vererbung zwischen zwei Formularen ermöglicht es, das Umschreiben aller Attribute einzuschränken.
  • Wenn wir Sammlungen von Entitäten einbetten möchten.
    Die Verwendung von Formularen als Dienste im Falle eines Hinzufügen- oder Bearbeiten-Formulars wird nicht empfohlen, da die Verwendung eines Dienstes die @Container. Darüber hinaus wird es schwer zu verstehen sein, dass dieser Dienst von einem für die Verarbeitung Verantwortlichen verwendet wird.

Befestigen Sie (Ordner) seine Formulare

Kürzlich begann Sensio mit einer konstanten Migration von Symfony2-Code zu zukünftigem Symfony3-Code. Unter der Liste der Änderungen, die vorgenommen werden können (Sie finden sie alle in UPGRADE-3.md), ist die neue Lösung für Binder die anfrage, die von einem formular mit gesendet wird unten stehende Formular die erstellt wurde. Die neue Methodik wird auf Seite 21 des ausführlich beschrieben Praxisbeispiele.

Sprechen Sie den vorgestellten Auszug aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
Öffentlichkeit Funktion neueAktion(Anfrage $request)
{
// Erstellen Sie Ihr Formular
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $ This->Behälter->holen(„doctrine.orm.default_entity_manager“);
$em->persist($post);
$em->flush();
Rückkehr $ This->weiterleiten($ This->Url generieren(„admin_post_show“), Array("Ausweis" => $post->getId()));
}
}

Internationalisierung

Der Zweck des Internationalisierungsmoduls besteht darin, den Inhalt abhängig von der Region oder der Sprache des Benutzers von einer Sprache in eine andere zu übersetzen. Dieses Kapitel ist mehr als nur Empfehlungsdaten geschrieben worden, um die Möglichkeiten in diesem Teil aufzuzeigen, der immer sensibel bleibt.

In Kapitel 8 beschreiben die Herausgeber detailliert, wie man die aktiviert Übersetzung.

was ist mit dem format

Symfony bietet eine Vielzahl von Übersetzungsformaten:

  • PHP
  • Qt
  • .po
  • .mo
  • JSON
  • CSV
  • INI
  • und viele andere

    Verwenden Sie das XLIFF-Format für Ihre Übersetzungsdateien.
    Dieses Zitat ist offensichtlich eine Sensio-Empfehlung. Ja aber warum ? Eine kurze und präzise Antwort wird uns gegeben.
    Von allen unterstützten Formaten werden nur das XLIFF-Format und das gettext-Format von professionellen Übersetzungstools unterstützt. Da XLIFF auf XML basiert, profitiert es von der Inhaltsvalidierung.
    Symfony 2.6 bringt eine neue Funktion, mit der Sie Ihre XLIFF-Dateien "kommentieren" (Notizen hinzufügen) können. Dies ist eine große Neuerung, da die Generierung von Übersetzungsdateien Übersetzern Probleme bereiten kann, die Bedeutung eines Satzes oder den Kontext, in dem er verwendet wird, zu verstehen. Kurz gesagt, XLIFF ist gut!

Wo sollen unsere Übersetzungsdateien gespeichert werden?

Diese Frage führt ein Beste Übung. Sensio empfiehlt, unsere Dateien in zu speichern app/Ressourcen/Übersetzungen.

Normalerweise haben wir unsere Übersetzungen in jedem unserer Pakete gespeichert. Das war keine schlechte Sache, aber Übersetzungen gelten im Allgemeinen als globale Teile unserer Apps, genau wie globale Vorlagen, deshalb empfiehlt Sensio, dass wir sie im speichern App.

Wie lassen sich unsere Anwendungen übersetzen?

Verwenden Sie immer Schlüssel, um Ihre Inhalte zu übersetzen.
hierauf Beste, ich werde meine Meinung nicht äußern, da ich wenig Gelegenheit habe, Bewerbungen zu übersetzen. Sensio empfiehlt, dass Sie zum Übersetzen eines Wortes wie "Benutzername" einen Schlüssel wie verwenden sollten label.benutzername.

Ein Beispiel finden Sie auf Seite 35.

Sicherheit

Kapitel 9 des Buches betrifft einen zentralen Teil von Symfony; Sicherheit !

Symfony wurde entwickelt, um Benutzer, die sich mit unseren Anwendungen verbinden möchten, einfach zu konfigurieren und zu authentifizieren. Dieser Teil ist sehr komplex und voller Details, also ist es ein grober Umriss. Weitere Dokumentation finden Sie auf der entsprechenden Seite.

Deklarieren Sie Ihre Firewalls

Die Konfigurationsoptionen sind in die Datei einzutragen security.yml welches ist in App/Konfig.

Sofern Sie nicht zwei verschiedene Verbindungen zu Ihrer Anwendung (System und Benutzer) haben, empfehlen wir, nur eine Entry-Firewall mit aktivierter anonymer Option zu verwenden.
Wow wow wow! Warte, ich komme auf Symfony an, ich habe nichts verstanden!

Was ist eine Firewall?

Sie können einen in Wanadev erstellten Artikel darüber finden, wie Sie die native Authentifizierung auf Symfony deklarieren und einrichten. In diesem Artikel wird detailliert beschrieben, was eine Firewall ist.

Eine einzige Firewall? Warum ein ?

Wenn Sie gerade den oben verlinkten Artikel gelesen haben, ist Ihnen vielleicht aufgefallen, dass mehrere Firewalls deklariert wurden.

In dem angegebenen Artikel waren die drei Namen dev, Haupt- et login. Trotzdem wird die vorgegebene Regel eingehalten, als Gateway kommt nur eine Firewall in Frage.

  • dev : Diese Firewall erlaubt die Debug-Leiste anzuzeigen.
  • Haupt- : diese Firewall ist unsere EINSTIEGSPUNKT. Anonyme Benutzer können sich anmelden, als ob sie die Regel respektieren würden. Alle Routen, die mit / beginnen, verwenden diesen Eintrag.
  • login : Es ist eine Firewall. Dies wird in einem einzigen Fall unser Gateway sein: wenn wir uns verbinden wollen. Dies ist unerlässlich, um Zugriff auf ein Anmeldeformular zu haben.
    Die Regel wird daher eingehalten.

Definieren Sie eine Codierung

Die Verschlüsselung von Passwörtern ist eine Schlüsselentscheidung. Es gibt mehrere Algorithmen, wie z sha (sha1, sha256, sha512, md5...).

Beim Deklarieren einer Codierung (siehe Deklarieren einer Codierung) können drei Parameter angegeben werden.

  • Der Verschlüsselungsalgorithmus (Standard: sha512);
  • Die Anzahl der Iterationen (standardmäßig: 5000);
  • Die Kodierung ist base64 des verschlüsselten Passworts (Standard: true).
    Trotz dieser Standardwerte lade ich Sie ein, sie zu ändern, um sie für Ihre Anwendungen zu ändern. Auch Sensio empfiehlt die Verwendung des Algorithmus bcrypt.

    Verwenden Sie bcrypt-Verschlüsselung, um Benutzerpasswörter zu verschlüsseln.
    Sensio erklärt die Verwendung von bcrypt. Dazu gehört ein salzen Wert. Dies begrenzt Angriffe und ist widerstandsfähiger gegen Brute-Force-Angriffe. Weitere Details finden Sie im obigen Wikipedia-Artikel.

Berechtigungen festlegen

Während einer Verbindung erkennt Symfony, welche Firewall verwendet werden soll. Anschließend und noch vor dem Zugriff auf die Steuerung wird eine Zugriffsprüfung durchgeführt. Sie sind in der Datei definiert security.yml,

Sensio empfiehlt:

  1. schützen Sie unsere "Rand-URL-Muster", verstehen Sie unsere globalen Muster (Beispiel: /admin);
  2. Verwenden Sie Anmerkungen @Sicherheit so viel wie möglich ;
  3. Überprüfen Sie die Rechte für einen Benutzer über den Dienst security.context (seit Symfony 2.6 hat sich der Dienst weiterentwickelt, siehe hier);
  4. Definieren Sie Wähler, um die Verkehrssicherheit einfach zu verwalten;
  5. Verwenden Sie die ACL um Objekt- und Benutzerrechte zu verwalten.

Verwenden Sie @Security-Anmerkungen

Sensio empfiehlt die Verwendung der Annotation @Security.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- SensiobündelnFrameworkExtraBundleKonfigurationStraße;
- SensiobündelnFrameworkExtraBundleKonfigurationSicherheit;
// …
/ **
* Zeigt ein Formular zum Erstellen einer neuen Post-Entität an.
* @Straße(„/neu“, name=“admin_post_neu“)
* @Sicherheit("has_role('ROLE_ADMIN')")
*/
Öffentlichkeit Funktion neueAktion()
{
// …
}

Verwenden Sie Ausdrücke, um Beschränkungen komplexer zu gestalten

Sensio erklärt uns, dass mit dieser Annotation auch komplexere Bedingungen generiert werden können, etwa ein Vergleich zweier Attribute zwischen zwei Objekten. Diese Anmerkung erfordert möglicherweise die Verwendung von ParamConverter.

Weitere Informationen finden Sie im Dokument:

  • Ausdrücke generieren
  • Konvertieren Sie Attribute in Objekte

Zugriffssicherheit in Twig

Wenn Sie den verbundenen Benutzer mit dem Benutzer eines Objekts vergleichen möchten, können Sie von Twig aus darauf zugreifen Benutzer noch nicht abgeschlossen.

1
2
3
{% if app.user … %}
...
{% Endif %}

Verwalten Sie Ihre Sicherheit einfach

Die Verwaltung der Sicherheit ist oft ein sensibler Teil, und die Organisation unseres Codes ist ein wesentlicher Bestandteil der erfolgreichen Sicherung unserer Anwendung. Die Verwendung von Voters ist sehr zu empfehlen. Andere Möglichkeiten, Ihren Code zu organisieren, können in Betracht gezogen werden. Beispielsweise können wir eine Entscheidung an eine Methode unseres Unternehmens übertragen.

Das Sensio-Beispiel finden Sie auf Seite 40.

Dieser Teil ist im Vergleich zu den Möglichkeiten, die Symfony bietet, sehr wenig detailliert. Ich rate Ihnen, etwas mehr Dokumentation zu diesem Teil zu lesen, wenn Sie mit einer Sicherheitsaufgabe konfrontiert sind.

Web-Assets

Assets ermöglichen es uns, Ressourcen wie Javascript, CSS, Schriftarten, Bilder usw. zu verwalten, damit sie von Ihren Seiten aus zugänglich sind.

Ihre Assets müssen im Ordner web/ gespeichert werden
Auf diese Weise können Sie Ihre Ressourcen wie folgt in Ihre Vorlagen laden:

1
2
<Link rel="Stilvorlage" href=« {{ asset(‘css/bootstrap.min.css’) }}«  />
<Skript src=« {{ asset(‘js/jquery.min.js’) }}« ></Skript>

Behalten Sie den öffentlichen Webordner und alles, was darin gespeichert ist.

Verwenden Sie Asset

Assetic hat mehrere Interessen, z. B. Dateikompilierung. Zum Beispiel Less-, Sass-, TypeScript-Dateien… Aus diesem Grund ist der Ordner Netz kann keine Dateien wie Dateien enthalten .weniger.

Verwenden Sie Assetic, um Ihre Assets zu kompilieren, zu kombinieren und zu minimieren, es sei denn, Sie verwenden GruntJS.

Erfahren Sie mehr über Assetic

Assetic ist trotz einiger Nachteile ein vollständiges Tool. Die Dokumentation zu diesem Modul finden Sie unter den folgenden Links:

  • Verwenden Sie Asset
  • Minimieren Sie CSS und JS
  • Bilder komprimieren
  • Siehe die offizielle Dokumentation

Tests einrichten

Das Testen wird von den meisten Entwicklern als wesentlich angesehen. Doch nur eine Minderheit setzt sie um.

Wir werden sehen, wie uns Sensio zur Durchführung unserer Tests rät.

Unit-Tests durchführen

Unit-Tests werden verwendet, um Funktionstests durchzuführen, die wiederum die Logik Ihrer Anwendung testen. Symfony hat keine bestimmten Tools zum Testen Ihrer Tests festgelegt. Die Werkzeuge PHPUnit et PHPSpec zitiert werden.

Funktionstests durchführen

Das Erstellen guter Szenarien für Ihre funktionalen Tests ist unerlässlich, und doch stoßen Entwickler schnell auf Probleme bei der Implementierung.

Definieren Sie einen Funktionstest, um zu testen, ob Ihre Seite korrekt geladen wurde.

Versuchen Sie, fest codierte URLs zu verwenden, anstatt sie über den Generator zu generieren.

Testen Sie die JavaScript-Funktionalität

Viele Tools existieren wie Nerz (eine PHPUnit-Bibliothek) und CasperJS.

Datensätze generieren

Dies ist oft ein Problem für Entwickler, die Datensätze generieren.

Sensio empfiehlt die Verwendung von Bibliotheken Schwindler et Alice.

Zusammenfassung

Dieser Artikel ist entnommen aus Empfohlene Vorgehensweise befolgen für Symfonie. Dieser Artikel bleibt zwar einfach, zielt aber darauf ab, die 50 Seiten mit Ratschlägen zu zerlegen, um neue Symfony-Entwickler anzuleiten.

★ ★ ★ ★ ★