RIA开发:两个MVC框架共存(客户端< - >服务器)

时间:2011-07-11 18:37:18

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

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

虽然我们处于学习Ext JS的早期阶段,但我们的导师正在鼓励我们了解如何使两个MVC框架共存并协同工作。

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

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分: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上创建一个表单,并且形成s 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 it的MVC,然后轻松地将extj添加到其中。

答案 1 :(得分:1)

您的想法很接近,但您在该架构中销售MVC短片的“控制器”部分。

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

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

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

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