Sollte ich AngularJS mit einem PHP-Framework mischen? [geschlossen]

161

AngularJS ist sehr leistungsfähig, wenn es um interaktives HTML5 und Modellbindung geht. Auf der anderen Seite ermöglichen PHP-Frameworks wie Yii eine schnelle, gut strukturierte, sichere und leistungsstarke Entwicklung von Webanwendungen. Beide Technologien bieten ausgefeilte Mittel für Datenzugriff, Iteration und Seitenlayout.

Ist es eine gute oder schlechte Praxis, diese beiden Ansätze zu mischen (clientseitige und serverseitige "Seiteneinrichtung"), oder widerspricht dies eher der Bedeutung interaktiver, nahtloser HTML5 AJAX-Webanwendungen?

Ich spreche nicht über das Generieren von JS mit PHP ( siehe diese Frage ) - ich spreche über das Generieren einer Ansicht, die AngularJS verwendet.

Ich weiß auch, dass eine AngularJS-Seite über REST-Services mit dem Server kommunizieren sollte (oder kann), um Daten abzurufen ( siehe diese Frage ), anstatt sie beispielsweise direkt von PHP-Variablen abzurufen. Aber für mich scheint es bequemer, den "Frame" für die gesamte Webanwendung separat in PHP zu entwerfen (z. B. das Hauptmenü erstellen oder Autorisierungen / Sitzungen usw. behandeln).

Dani
quelle
28
Gute Frage. Ich wünschte, es gäbe einen StackExchange-Speicherort für diese Art von Frage. Ich bin an PHP gewöhnt und habe ein cURL-Projekt, um viele Daten selbst zu sammeln, und glaube, dass ein JavaScript-Framework über einer Bibliothek gut in mein Projekt passt. Mein Problem ist wie Ihres. Ich möchte wissen, was eine gute Praxis ist (Vor- und Nachteile) und welche Teile Sie aus dem ursprünglichen Projekt (PHP) usw. entfernen. Ich glaube, diese Gespräche könnten zu Diskussionen führen, aber wie können wir zu dem gelangen beste Zusammenführung der beiden Sprachen ohne Konversation.
Shane
Ich habe einige AngularJS-Projekte, die ich zurück in PHP / Jquery konvertiere. Ich hatte endlose Probleme damit, mit einer Vielzahl von Mobilgeräten und Browsern zu arbeiten. Angular ist schwer zu SEO und Google ist nicht sein Freund. Ich habe gesehen, dass Websites mit Top-Rang den SERPS aufgrund der Umstellung auf eckige ...
HappyCoder

Antworten:

180

Es scheint, dass Sie mit der Entwicklung in PHP besser vertraut sind. Sie lassen sich dadurch davon abhalten, das volle Potenzial von Webanwendungen auszuschöpfen.

Es ist zwar möglich, dass PHP Teil- und Gesamtansichten rendert, aber ich würde es nicht empfehlen.

Um die Möglichkeiten von HTML und Javascript für die Erstellung einer Webanwendung, dh einer Webseite, die sich eher wie eine Anwendung verhält und stark vom clientseitigen Rendern abhängt, voll auszuschöpfen, sollten Sie in Betracht ziehen, den Client die Verantwortung für die Verwaltung des Status und der Präsentation übernehmen zu lassen. Dies ist einfacher zu warten und benutzerfreundlicher.

Ich würde Ihnen empfehlen, sich in einem API-zentrierten Ansatz wohler zu fühlen. Anstatt PHP eine vorgerenderte Ansicht ausgeben zu lassen und Angular für die bloße DOM-Manipulation zu verwenden, sollten Sie in Betracht ziehen, dass das PHP-Backend die Daten ausgibt, die auf RESTFully angewendet werden sollen, und Angular sie präsentieren lässt.

Verwenden von PHP zum Rendern der Ansicht:

/user/account

if($loggedIn)
{
    echo "<p>Logged in as ".$user."</p>";
}
else
{
    echo "Please log in.";
}

Wie das gleiche Problem mit einem API-zentrierten Ansatz gelöst werden kann, indem JSON wie folgt ausgegeben wird:

api/auth/

{
  authorized:true,
  user: {
      username: 'Joe', 
      securityToken: 'secret'
  }
}

und in Angular können Sie einen Abruf durchführen und die Antwortclientseite verwalten.

$http.post("http://example.com/api/auth", {})
.success(function(data) {
    $scope.isLoggedIn = data.authorized;
});

Die von Ihnen vorgeschlagene Client- und Serverseite zu kombinieren, eignet sich möglicherweise für kleinere Projekte, bei denen die Wartung nicht wichtig ist und Sie der einzige Autor sind. Ich tendiere jedoch eher zur API-zentrierten Methode, da dies eine korrektere Trennung von Bedenken und Willen darstellt einfacher zu pflegen sein.

Kenneth Lynne
quelle
2
Zu einfach von einem Beispiel. Ich selbst war auf der Suche nach mehr als nur einem Super-Duper-Basis-Login, das jeder macht. Großer Unterschied, wenn Sie PHP / HTML und Variablen <td> $ name </ td> über <td> {{name}} </ td> und dann 'app.run (Funktion ($ rootScope) {$ rootScope.name = haben "Ari Lerner";}); ' Ich selbst versuche, die Vorteile des Versuchs oder des Versuchs, PHP 'DYNAMIC' Angular Pages erstellen zu lassen, zu sehen / zu finden. Und es einfach nicht zu sehen. Lassen Sie einen Client warten, um jedes einzelne Element zu laden und die Vorlagen zu füllen / zu ändern. Nur nicht scharf auf die Idee, dass PHP gerade eine solche Wand aus Javascript generiert und leicht sichtbar ist
Shawn Rebelo
2
@ShawnRebelo Kannst du ein bisschen klarstellen, was du damit meinst a wall of javascript? Ich bin nach Jahren des PHP-Renderings neu in der Angular / JS-API-Welt, daher ist diese Diskussion für mich interessant.
Dan Nissenbaum
"Anstatt PHP eine vorgerenderte Ansicht ausgeben zu lassen und Winkel für bloße DOM-Manipulation zu verwenden ..." - Lassen Sie mich Ihnen ein neues, altes Konzept vorstellen .
Dissident Rage
Genau so sollte es sein, eine erholsame API aus dem Backend kann eine beliebige Sprache sein und eine eckige App für das Frontend kann unabhängig vom Backend funktionieren.
Amir Savand
3
Was ich nicht verstehen kann, ist, warum ich eine generische Seite mit Platzhaltern laden und dann einen Teil mit einer oder mehreren asynchronen Anforderungen laden sollte, um etwas zu erhalten, das ich bereits beim Laden der ersten Seite hatte, wie Benutzer- / Authentifizierungsdaten?
Tobia