我应该把AngularJS和PHP框架混在一起吗?


Should I mix AngularJS with a PHP framework?

AngularJS在交互式HTML5和模型绑定方面非常强大。另一方面,像Yii这样的PHP框架支持快速、结构良好、安全和强大的web应用程序开发。这两种技术都为数据访问、迭代和页面布局提供了复杂的方法。

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

我不是在说用PHP生成JS(见这个问题)——我是在说用AngularJS生成一个视图。

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

看起来你可能更喜欢用PHP开发,但这阻碍了你充分利用web应用程序的潜力。

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

为了充分利用HTML和javascript的可能性来制作一个web应用程序,也就是说,一个更像应用程序的web页面,并且在很大程度上依赖于客户端渲染,你应该考虑让客户端维护管理状态和表示的所有责任。这将更容易维护,并将更用户友好。

我建议您以更以API为中心的方法来考虑问题。你不应该让PHP输出预渲染的视图,而仅仅使用angular进行DOM操作,你应该考虑让PHP后端输出应该以rest方式执行的数据,并让angular呈现它。

使用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中,你可以做一个get,然后处理客户端响应。

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

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