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

16 浏览
0 Comments

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

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

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

我不是在讨论使用PHP生成JS(请参见此问题)-我是在讨论生成一个将使用AngularJS的视图。

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

0
0 Comments

问题的出现原因:

1. 提问者习惯使用PHP开发,可能因此不愿意充分利用Web应用的潜力。

2. PHP可以渲染部分视图和整个视图,但并不推荐这样做。

3. 为了充分利用HTML和JavaScript的可能性,开发一个更像应用程序的网页,且在客户端渲染方面依赖更重,应该考虑让客户端负责管理状态和呈现,这样更易于维护,也更用户友好。

问题的解决方法:

1. 推荐更多地采用面向API的方法。不要让PHP输出预渲染的视图,而是使用RESTful方式输出应该被操作的数据,并让Angular进行呈现。

2. 使用PHP渲染视图的示例代码为:

/user/account

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

3. 使用面向API的方法,可以通过以下方式输出JSON:

api/auth/

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

4. 在Angular中可以进行get操作,并在客户端处理响应:

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

5. 为了同时结合客户端和服务器端,可以采用提问者提出的方式,适用于维护不重要且只有单个作者的小项目。但是,我更倾向于面向API的方式,因为这样更符合正确的关注点分离,更易于维护。

文章内容如下:

从提问者的问题中可以看出,提问者习惯使用PHP进行开发,但这可能会限制他们充分利用Web应用的潜力。尽管PHP可以渲染部分视图和整个视图,但并不推荐这样做。为了充分利用HTML和JavaScript的可能性,我们应该让客户端负责管理状态和呈现,这样更易于维护,并且更用户友好。

为了解决这个问题,我们推荐采用面向API的方法。不要让PHP输出预渲染的视图,而是使用RESTful方式输出应该被操作的数据,并让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的方式,因为这样更符合正确的关注点分离,更易于维护。

对于提问者关于PHP生成大量JavaScript代码的疑问,可以引入一个新/旧概念:渐进增强。这种方式更符合应该采用的方式。

为了更好地利用Web应用的潜力,我们应该采用面向API的方法,让客户端负责管理状态和呈现。这样可以更易于维护,并且更用户友好。

0