【问题标题】:RIA development: Coexistence of two MVC frameworks (client<->server)RIA 开发:两个 MVC 框架的共存(客户端<->服务器)
【发布时间】:2011-10-03 01:06:35
【问题描述】:

我们正在尝试使用两个基于 MVC 的框架为大学项目构建 RIA;客户端的JS(Ext JS 4)和服务器端的PHP(大概是YII)。

虽然我们处于学习 Ext JS 的早期阶段,但我们的导师鼓励我们从大局出发,弄清楚我们如何才能使这两个 MVC 框架共存并协同工作。

现在我正在编写一些测试应用程序,其中 JS 框架调用不同的 .php,每个任务一个,我开始认为这不是要走的路。

我正在考虑使用以下方案;服务器端充当 API。通过两个视图连接两个系统。客户端从客户端视图向服务器端调用服务器对象及其成员,例如使用json's 到一个独特的 .php 文件,该文件将充当服务器视图,这些调用将在服务器中处理,以 MVC 方式在内部执行内容并将适当的数据返回给客户端。

所以...因为我没有处理 MVC 架构的经验,但我不知道我所说的是否有意义。

我想必须有正确的方法来完成这项工作。有什么建议或指点吗?

提前致谢。

【问题讨论】:

    标签: php javascript model-view-controller frameworks extjs


    【解决方案1】:

    实际上我在一个像你这样的项目上,我在服务器端使用 zend 框架,而不是 yii,但原理是一样的。在你的服务器端视图中,你需要设置加载 extjs js 文件.这是我的 php 代码:

     <?php
    // Initialize Extjs on development ENV
    if (APPLICATION_ENV == 'development') {
    $this->headLink ()->prependStylesheet ( './javascript/extjs/resources/css/ext-   all-      debug.css' );
     $this->headScript ()->prependFile ( './javascript/extjs/ext-debug.js' );
    } // Initialize Extjs on production ENV
    else {
     $this->headLink ()->appendStylesheet ( './javascript/extjs/resources/css/ext-   all.css' );
     $this->headScript ()->prependFile ( './javascript/extjs/ext.js' );
    }
    
    // Load EXTJS MVC Startup from the public folder
    $this->headScript ()->appendFile ( './app.js' );
    
    // Output aggregated css & js files
    echo $this->headLink();
    echo $this->headScript();
    ?>
    

    我在服务器端为每个表单/网格创建了一个控制器(php 文件),等等我在客户端创建,它们将轻松地相互交互并使用 JSON。例如,您在 extjs 和您的forms submit url would be the path to your server side controller and you code process them using $_POST[fields]; You should disable view for controllers which send json data. Understanding MVC takes time and practice. What i can suggest you is to first choose your desired php framework,study its MVC 然后轻松添加 extjs 进去。

    【讨论】:

      【解决方案2】:

      您的想法很接近,但您在该架构中卖掉了 MVC 的“控制器”部分。

      您是对的,您将从客户端视图调用服务器对象。但是不必对不同的 php 文件进行该调用。 Yii 支持路由,这意味着你可以从同一个控制器调用不同的方法。例如,您的控制器负责基本的 CRUD 操作(创建、读取、更新、删除,以防您不熟悉)。在一个控制器中,每个操作都有 1 种方法。您的 api 可能如下所示:

      请注意,所有这些调用都将转到RiaController。这个应该由 Yii 的routing engine处理。

      在视图中返回数据会比必要的工作多一点。由于您使用 javascript 发出请求,因此如果该 javascript 接收 JSON 或 XML 而不是 HTML 视图会更容易。 Yii 确实有一个JSON class 能够将 PHP 数据转换为 JSON。我建议调查一下。

      在 RIAController 中的每个方法结束时,您有责任从 CJSON 返回输出(例如 $this-&gt;renderText(CJSON::encode($myoutput));)。您将在客户端使用此输出来完成工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-29
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        • 2012-05-23
        • 1970-01-01
        相关资源
        最近更新 更多