php - 结合 Angularjs 和 CodeIgniter

标签 php javascript codeigniter angularjs

我正在开发一个用 CodeIgniter 编写的现有网站,我们正在考虑将 AngularJS 用于一些需要大量前端功能的页面,但我们不想(一次(还))替换所有 CodeIgniter View 。

所以我点击了一个由 angular 的路由器控制的链接,它由 javascript 处理,但下一个链接可能是应该由 CodeIgniter 框架处理的“正常”请求。

是否有一些优雅的方式将这两种方法结合起来?我真的不介意一些额外的客户端开销,因为该站点尚未在生产环境中运行。

最佳答案

听起来您希望随着 Angular 应用程序的增长逐渐减少对 CodeIgniter (CI) 路由的使用。这并不困难,但需要很多细节。哪种方法可行取决于您的项目结构。 注意:我从 Code Igniter URL 中删除了 index.php,因此下面的路径可能与默认路径不同。

1) 在根目录下安装 CodeIgniter

如果 CI 安装在服务器的根目录下,您可以在 CI 中创建一个文件夹(例如我有一个“ng”文件夹)。您的项目将如下所示:

    /controllers
    /models
    /ng
    (etc)
    /index.php (code igniter index file)

/ng 中放置一个 .htaccess 文件,内容如下:

    Order allow, deny
    Allow from all

这允许直接访问 /ng 中的文件,而不是通过 CI 的路由系统将这些请求发回。例如,您现在可以直接加载它: example.com/ng/partials/angular-view.html

主网页仍将由 CodeIgniter 创建,但它现在可以包含 Angular Assets ,例如局部 View 等。最终,您可以通过返回一个简单的页面并加载 Angular 来替换 CodeIgniter 所做的大部分工作来自 /ng 的部分 View 就像它的设计一样。

这个方法很好,因为 CodeIgniter 可以控制是否加载初始页面(通过 CI Controller 中的一些用户身份验证代码)。如果用户未登录,他们将被重定向并且永远看不到 Angular 应用程序。

2) 目录中的 CodeIgniter

如果 CI 安装在一个目录中,比如 example.com/myapp/(code igniter) 你可以简单地在它旁边创建一个目录,example.com/myappNg/

    /myapp/
    /myapp/controllers/
    /myapp/models/
    /myapp/(etc)
    /myapp/index.php (code igniter index file)
    /myappNg/
    /myappNg/partials/
    /myappNg/js/
    /myappNg/(etc)

现在,在您的 Angular 应用程序中,您可以通过创建相对于域根而不是相对于 Angular 应用程序的路径来从 CI 请求资源。例如,在 Angular 中,您将不再从 Angular 文件夹 partials/angular-view.html 请求局部 View ,而是从 CI /myapp/someResource 请求 View 。请注意前导 /。 “someResource”可以返回一个 html 文档,或 JSON 或您首先使用 Code Igniter 所做的任何事情。

最终您可以替换引用 /myapp/ 的路径数。一旦您不再将 CI 用于任何事情,您只需将 Angular index.html 放在 /myapp/ 中,它将继续在 /myappNg/ 中引用您的路径。

TL;DR 使您的 Angular 应用完全可用,并将其与 CodeIgniter 分离。逐渐转向使用 Angular 部分 View 和其他 JSON 源,而不是链接到 CodeIgniter 页面。最终用引导 Angular 的 HTML 文件替换您的 CodeIgniter 端点。

关于php - 结合 Angularjs 和 CodeIgniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14682830/

相关文章:

javascript - 如何在不打开日历的情况下动态更改日期

javascript - 当秒数超过 59 或以上时,easytimer.js 自动重置

php - 从表中检索所有数据,然后计算另一个表中有多少结果

php - 将多个参数绑定(bind)到mysqli查询中

javascript - 给定一个对象数组,如何在保留原始键值的同时用另一个键名替换键名?

Codeigniter 电子邮件不编码为 utf8

php - 如何使用 CI 事件记录仅在 DATE 数据类型列中选择月份部分?

php - CodeIgniter 中的博客 : Where Does the Model start, 和 Controller 端?

php - 关于为每个客户存储照片以便他们可以访问的解决方案的建议

php - 头像生成器的实时 View