Dois-je mélanger AngularJS avec un framework PHP? [fermé]

161

AngularJS est très puissant en matière de HTML5 interactif et de liaison de modèle. D'autre part, les frameworks PHP tels que Yii permettent un développement d'applications Web rapide, bien structuré, sûr et puissant. Les deux technologies fournissent des moyens sophistiqués pour l'accès aux données, l'itération et la mise en page.

Est-ce une bonne ou une mauvaise pratique de mélanger ces deux approches ("mise en page" côté client et côté serveur) ou est-ce plutôt contraire au sens des applications Web AJAX HTML5 interactives et transparentes?

Je ne parle pas de générer du JS en utilisant PHP ( voir cette question ) - je parle de générer une vue qui utilisera AngularJS.

Je sais aussi qu'une page AngularJS devrait (ou peut) communiquer avec le serveur via les services REST pour obtenir des données ( voir cette question ) au lieu de les récupérer, par exemple, directement à partir de variables PHP. Mais pour moi, il me semble plus pratique de concevoir le "cadre" pour l'ensemble de l'application Web séparément en PHP (par exemple, créer le menu principal ou gérer l'autorisation / les sessions, etc.)

Dani
la source
28
Excellente question. Je souhaite qu'il y ait un emplacement StackExchange conçu pour ce type de question. Je suis habitué à PHP et j'ai un projet cURL pour collecter moi-même beaucoup de données, et je crois qu'un framework JavaScript sur bibliothèque conviendrait parfaitement à mon projet. Mon problème est comme le vôtre, je veux savoir ce qui est une bonne pratique (avantages et inconvénients) ainsi que les parties que vous supprimez du projet original (PHP), etc. Je pense que ces conversations pourraient susciter un débat, mais comment pouvons-nous en arriver au meilleure fusion des deux langues sans conversation.
Shane
J'ai quelques projets AngularJS que je reconvertis en PHP / Jquery. J'ai eu des problèmes sans fin pour devenir angulaire pour travailler avec une grande variété d'appareils mobiles et de navigateurs. Angular est difficile pour le référencement et Google n'est pas son ami. J'ai vu des sites avec le meilleur classement disparaître du SERPS en raison du passage à angular ...
HappyCoder

Réponses:

180

Il semble que vous soyez plus à l'aise avec le développement en PHP, vous laissez cela vous empêcher d'utiliser tout le potentiel des applications Web.

Il est en effet possible d'avoir PHP de rendre des vues partielles et entières, mais je ne le recommanderais pas.

Pour utiliser pleinement les possibilités du HTML et du javascript pour créer une application Web, c'est-à-dire une page Web qui agit davantage comme une application et qui repose fortement sur le rendu côté client, vous devez envisager de laisser le client conserver toute la responsabilité de la gestion de l'état et de la présentation. Cela sera plus facile à maintenir et plus convivial.

Je vous recommanderais de vous sentir plus à l'aise dans une approche plus centrée sur l'API. Plutôt que de faire sortir PHP une vue pré-rendue et d'utiliser angular pour une simple manipulation DOM, vous devriez envisager de faire afficher par le backend PHP les données qui doivent être traitées sur RESTFully, et que Angular les présente.

Utilisation de PHP pour rendre la vue:

/user/account

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

Comment le même problème peut être résolu avec une approche centrée sur l'API en générant JSON comme ceci:

api/auth/

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

et dans Angular, vous pouvez faire un get et gérer la réponse côté client.

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

Mélanger à la fois le côté client et le côté serveur de la manière que vous avez proposée peut convenir à des projets plus petits où la maintenance n'est pas importante et où vous êtes l'auteur unique, mais je penche davantage vers la manière centrée sur l'API car ce sera une séparation plus correcte des considérations et de la volonté être plus facile à entretenir.

Kenneth Lynne
la source
2
Pour simple d'un exemple. Je cherchais moi-même plus qu'une connexion de base super duper que tout le monde fait. Grande différence lorsque vous avez PHP / HTML et les variables <td> $ name </td> sur <td> {{name}} </td> puis 'app.run (function ($ rootScope) {$ rootScope.name = "Ari Lerner";}); ' J'essaie moi-même de voir / trouver l'avantage d'essayer ou d'essayer de faire en sorte que PHP crée des pages angulaires «DYNAMIQUES». Et juste ne pas le voir. Faire attendre un client pour charger chaque élément individuel et remplir / modifier les modèles. Tout simplement pas enthousiaste à l'idée de PHP générant un mur de javascript comme celui-là pour l'instant, et facilement visible
Shawn Rebelo
2
@ShawnRebelo Pouvez-vous clarifier un peu ce que vous entendez par a wall of javascript? Je suis nouveau dans le monde des API Angular / JS après des années de rendu PHP, donc cette discussion m'intéresse.
Dan Nissenbaum
"Plutôt que d'avoir PHP en sortie une vue pré-rendue, et d'utiliser angular pour une simple manipulation DOM ..." - Permettez-moi de vous présenter un nouveau et ancien concept .
Dissident Rage
C'est exactement ce que cela devrait être, une API reposante du backend peut être n'importe quel langage et une application angulaire pour le front-end peut fonctionner quel que soit le backend.
Amir Savand
3
Ce que je ne comprends pas, c'est pourquoi devrais-je charger une page générique avec des espaces réservés, puis charger une partie avec une ou plusieurs requets asynchrones pour obtenir quelque chose que j'avais déjà lors du chargement de la première page, comme les données utilisateur / authentification?
Tobia