164

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

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

我不是在谈论使用 PHP 生成 JS(参见这个问题)——我说的是生成一个将使用 AngularJS 的视图。

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

4

1 回答 1

182

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

确实有可能让 PHP 呈现部分视图和整个视图,但我不推荐它。

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

我建议您以更加以 API 为中心的方法来更自在地思考。与其让 PHP 输出一个预渲染的视图,并使用 angular 来进行 DOM 操作,不如考虑让 PHP 后端输出应该对 RESTFully 进行操作的数据,并让 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 中,您可以进行获取并处理响应客户端。

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

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

于 2013-03-25T22:06:45.003 回答