我应该将AngularJS与PHP框架混合使用吗?[关闭]


161

在交互式HTML5和模型绑定方面,AngularJS非常强大。另一方面,诸如Yii之类的PHP框架可实现快速,结构合理,安全且功能强大的Web应用程序开发。两种技术都提供了用于数据访问,迭代和页面布局的复杂方法。

混合这两种方法(客户端和服务器端“页面设置”)是好是坏做法,还是违反了交互式,无缝HTML5 AJAX Web应用程序的含义?

我不是在谈论使用PHP生成JS(请参阅此问题),而是在谈论生成将使用AngularJS的视图。

我也知道AngularJS页面应该(或可以)通过REST服务与服务器通信以获取数据(请参阅此问题),而不是直接从例如PHP变量中检索它。但是对我来说,用PHP分别为整个Web应用程序设计“框架”似乎更方便(例如,构建主菜单或处理授权/会话等)。


28
好问题。我希望有一个专为此类问题设计的StackExchange位置。我已经习惯了PHP,并且自己有一个cURL项目来收集大量数据,并且相信基于库的JavaScript框架将非常适合我的项目。我的问题就像您的问题一样,我想知道什么是好的做法(优点和缺点),以及您从原始项目(PHP)等中删除了哪些部分。我相信这些对话会引起争论,但是我们如何才能无需对话即可将两种语言完美融合。
Shane

我有一些AngularJS项目正在转换回PHP / Jquery。我遇到了无穷无尽的问题,无法适应各种移动设备和浏览器。Angular很难进行SEO,而google不是它的朋友。我已经看到排名最高的网站由于切换到角度网站而消失了SERPS ...
HappyCoder

Answers:


180

似乎您可能更愿意使用PHP进行开发,但是这会让您无法利用Web应用程序的全部潜能。

确实有可能让PHP呈现部分视图和整个视图,但是我不建议这样做。

为了充分利用HTML和javascript的可能性来制作Web应用程序,即一个行为更像应用程序并且严重依赖客户端呈现的网页,您应该考虑让客户端承担管理状态和表示的全部责任。这将更易于维护,并且将更加用户友好。

我建议您以一种更加以API为中心的方法更轻松地思考。您应该考虑让PHP后端输出应该在RESTFully上执行的数据,并让Angular呈现它,而不是让PHP输出一个预渲染的视图,而不是使用angular进行纯DOM操作。

使用PHP渲染视图:

/user/account

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

如何以API为中心的方法通过输出如下JSON来解决同一问题:

api/auth/

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

在Angular中,您可以获取并处理响应客户端。

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

以客户端和服务器端的方式融合您提出的方法可能适合于维护并不重要且您是单一作者的较小项目,但是我更倾向于以API为中心的方式,因为这样可以更正确地分离问题,并且易于维护。


2
举一个简单的例子。我自己不仅在寻找所有人都想要的超级duper基本登录信息。当您使用PHP / HTML和变量<td> $ name </ td>而不是<td> {{name}} </ td>然后是'app.run(function($ rootScope){$ rootScope.name = “ Ari Lerner”;});' 我本人试图查看/发现尝试或尝试使PHP制作“动态”角度页面的好处。而且只是没有看到它。让客户端等待加载每个单独的元素并填充/更改模板。只是不热衷于PHP生成像这样的JavaScript墙并且易于查看的想法
Shawn Rebelo 2015年

2
@ShawnRebelo您能澄清一下您的意思a wall of javascript吗?经过多年的PHP渲染,我对Angular / JS API领域还是陌生的,所以这个讨论对我来说很有趣。
Dan Nissenbaum 2015年

“不是让PHP输出预渲染的视图,而是仅将Angle用于DOM操作...”-让我向您介绍一个新的概念
持不同政见者的愤怒

就是这样,后端的静态API可以是任何语言,并且前端的有角度的应用程序都可以工作,而与后端无关。
阿米尔·萨凡德

3
我不明白的是为什么我应该使用占位符加载通用页面,然后使用一个或多个异步记录来加载某些部分,以获得我在第一页加载中已经拥有的东西(例如用户/身份验证数据)?
托比亚
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.