当涉及交互式HTML5和模型绑定时,AngularJS非常强大。另一方面,诸如Yii之类的PHP框架可实现快速,结构合理,安全且功能强大的Web应用程序开发。两种技术都提供了用于数据访问,迭代和页面布局的复杂方法。
混合这两种方法(客户端和服务器端的“页面设置”)是好是坏做法,还是违反了交互式,无缝HTML5 AJAX Web应用程序的含义?
我不是在谈论使用PHP生成JS,而是在谈论生成将使用AngularJS的视图。
我也知道AngularJS页面应该(或可以)通过REST服务与服务器通信以获取数据,而不是直接从例如PHP变量中获取数据。但是对我来说,用PHP分别为整个Web应用程序设计“框架”似乎更方便(例如,构建主菜单或处理授权/会话等)。
似乎您可能更愿意使用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为中心的方式,因为这将更加正确地分离问题,并会易于维护。