Devo misturar o AngularJS com uma estrutura PHP? [fechadas]

161

O AngularJS é muito poderoso quando se trata de HTML5 interativo e de associação de modelos. Por outro lado, estruturas PHP como o Yii permitem o desenvolvimento rápido, bem estruturado, seguro e poderoso de aplicativos da web. Ambas as tecnologias fornecem meios sofisticados para acesso a dados, iteração e layout de página.

É uma boa ou má prática misturar essas duas abordagens ("configuração da página" do lado do cliente e do servidor) ou isso é contra o significado de aplicativos da Web HTML5 AJAX interativos e integrados?

Não estou falando sobre gerar JS usando PHP ( veja esta pergunta ) - estou falando sobre gerar uma exibição que fará uso do AngularJS.

Eu também sei que uma página AngularJS deve (ou pode) se comunicar com o servidor via serviços REST para obter dados ( consulte esta pergunta ) em vez de recuperá-la diretamente, por exemplo, de variáveis ​​PHP. Mas para mim, parece mais conveniente projetar o "quadro" para todo o aplicativo da Web separadamente em PHP (por exemplo, criar o menu principal ou manipular autorizações / sessões etc.)

Dani
fonte
28
Ótima pergunta. Eu gostaria que houvesse um local StackExchange projetado para esse tipo de pergunta. Estou acostumado ao PHP e tenho um projeto cURL para coletar muitos dados sozinho, e acredito que uma estrutura JavaScript sobre a biblioteca seria uma boa opção para o meu projeto. Meu problema é como o seu. Quero saber o que é uma boa prática (vantagens e desvantagens), além de quais partes você tira do projeto original (PHP) etc. melhor mesclagem dos dois idiomas sem uma conversa.
21413 Shane
Eu tenho alguns projetos AngularJS que estou convertendo de volta para PHP / Jquery. Eu tive problemas intermináveis ​​com a angularidade para trabalhar com uma grande variedade de dispositivos móveis e navegadores. Angular é difícil para SEO e o Google não é amigo. Já vi sites com topo do ranking desaparecer o SERPS devido à transição para angular ...
HappyCoder

Respostas:

180

Parece que você pode se sentir mais confortável com o desenvolvimento do PHP, mas isso impede que você utilize todo o potencial com aplicativos da Web.

É de fato possível que o PHP processe parciais e exibições inteiras, mas eu não o recomendaria.

Para utilizar plenamente as possibilidades de HTML e javascript para criar um aplicativo da Web, ou seja, uma página da Web que se assemelha mais a um aplicativo e depende muito da renderização do lado do cliente, considere permitir que o cliente mantenha toda a responsabilidade de gerenciar o estado e a apresentação. Isso será mais fácil de manter e mais amigável.

Eu recomendo que você se sinta mais à vontade em uma abordagem mais centrada na API. Em vez de fazer com que o PHP produza uma visualização pré-renderizada e use angular para mera manipulação de DOM, você deve considerar que o back-end do PHP produza os dados que devem ser executados no RESTFully e deve ser apresentado pelo Angular.

Usando o PHP para renderizar a exibição:

/user/account

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

Como o mesmo problema pode ser resolvido com uma abordagem centrada na API, produzindo JSON assim:

api/auth/

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

e no Angular você pode obter e gerenciar o lado do cliente de resposta.

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

Para combinar o lado do cliente e o servidor da maneira que você propôs, pode ser adequado para projetos menores em que a manutenção não é importante e você é o autor único, mas eu me inclino mais para a maneira centrada na API, pois isso será uma separação mais correta das preocupações e seja mais fácil de manter.

Kenneth Lynne
fonte
2
Para simples de um exemplo. Eu mesmo estava procurando mais do que apenas um login básico de super duper que todo mundo faz. Grande diferença quando você tem PHP / HTML e variáveis ​​<td> $ name </td> sobre <td> {{name}} </td> e depois 'app.run (function ($ rootScope) {$ rootScope.name = "Ari Lerner";}); ' Eu mesmo estou tentando ver / encontrar a vantagem de tentar ou tentar fazer o PHP criar páginas angulares 'DINÂMICAS'. E apenas não vendo. Ter um cliente esperando para carregar cada elemento individual e preencher / alterar os modelos. Só não estou entusiasmado com a idéia do PHP gerar uma parede de javascript como essa, ainda, e facilmente visível
Shawn Rebelo
2
@ ShawnRebelo Você pode esclarecer um pouco o que você quer dizer com a wall of javascript? Sou novo no mundo da API Angular / JS depois de anos de renderização em PHP, portanto essa discussão é interessante para mim.
Dan Nissenbaum
"Em vez de o PHP produzir uma visualização pré-renderizada e usar angular para mera manipulação de DOM ..." - Deixe-me apresentar a você um novo conceito antigo .
Dissident Rage
É exatamente assim que deve ser: uma API repousante do back-end pode ser qualquer idioma e um aplicativo angular para o front-end pode funcionar independentemente do back-end.
Amir Savand
3
O que não consigo entender é por que devo carregar uma página genérica com espaços reservados e, em seguida, carregar uma parte com um ou mais requets assíncronos para obter algo que eu já tinha na primeira página, como dados de usuário / autenticação?
21417 Tobia