【问题标题】:Cake php with Extjs Through editable grid update,insert and delete带有 Extjs 的 Cake php 通过可编辑的网格更新、插入和删除
【发布时间】:2011-11-07 15:54:18
【问题描述】:

我想通过可编辑的网格用 extjs 3.2 开发 cake php。

在网格中我们可以进行插入、更新和删除操作。

当我们从“电影”模型文件中获取数据并在 view/movie/json 中创建一个 json 文件时

在 json 文件中我得到了数据,但是

如果我想在网格中显示数据,那么这个 json 文件数据如何在网格存储中获取。

谢谢。

【问题讨论】:

  • 在来这里询问之前,您应该尝试自己做一些研究,如果您不知道它是如何工作的,请查找 API 和教程,然后提出具体问题。这是 CakePHP 食谱,它有几个教程并解释了您需要知道的所有内容book.cakephp.org 如果您的问题因不好而被关闭,请不要再次打开相同的问题。
  • 我不明白这个问题

标签: php mysql cakephp extjs integration


【解决方案1】:

在工作中,我们使用 CakePHP 和 ExtJS 进行了大量工作。

我们单独使用 ExtJS 的视图只有调用来包含该视图的特定 javascript 文件,以及一个用于呈现 ExtJS 模块的 div。

如果您在布局的头部使用<?php echo $scripts_for_layout ?>,您可以使用

轻松地从视图内部附加单个javascript文件
<?php echo $this->Html->script('relative/path/from/js/folder.js', array('inline' => false)) ?>

在 Ext 中,您需要将网格设置为使用 Ext.data.Store 的实例,通过存储和它的依赖项(您还需要代理、读取器和写入器),您可以发送回数据并传给你的 CakePHP 控制器。

我们更喜欢将 JSON 用于我们的数据,因为它很容易在我们需要的地方进行操作和持久化。

我们的基本设置通常如下所示。

在 ExtJS 中

var proxy = new Ext.data.HttpProxy({
    api: {
        // these will map to cakephp controller actions
        create:  { url: '/cake_controller/create',  method: 'POST' },
        read:    { url: '/cake_controller/read',    method: 'GET'  },
        update:  { url: '/cake_controller/update',  method: 'POST' },
        destroy: { url: '/cake_controller/destroy', method: 'POST' }
    }
});

var fields = Ext.data.Record.create([
    // this will map to your database fields (or at least the ones your
    // returning from cakephp to put in your grid
    { name: 'id', type: 'int' },
    { name: 'another_model_field' },
    { name: 'created', type: 'date', dateFormat: 'Y-m-d H:i:s' },
    { name: 'modified', type: 'date', dateFormat: 'Y-m-d H:i:s' },
]);

var reader = Ext.data.JsonReader({
    root: 'controllerName' // this is the root node of the json cakephp is replying with
}, fields);

var writer = Ext.data.JsonWriter({
    encoded: true,
    writeAllFields: true
});

var store = Ext.data.Store({
    storeId: 'myStore',
    proxy: proxy,
    reader: reader,
    writer: writer,
    autoSave: true,
    autoLoad: true
});

然后在您的网格中,将您的商店设置为您刚刚创建的商店

var grid = Ext.grid.GridPanel({
    store: store,
    ...
    ...
    ...
});

每当 store 发生变化时,它都会调用映射到 CakePHP 控制器动作的相关 api 方法(创建、读取、更新、销毁)。在您的操作中,您可以通过$this-&gt;params['form'] 访问数据。如果您像我们一样使用 Json,您可以使用 json_decode($this-&gt;params['form'], true) 将其解码为关联数组,以便在 CakePHP 方面轻松操作/持久化。

你可以从你的 CakePHP 动作中返回某些东西,以便 ExtJS 知道保存/更新/等是否成功。我们通常只返回用 Json 编码的array('success' =&gt; true)

我希望这可以帮助您入门,这需要很多内容,但不是大量的工作,只是大量的打字。多做几次就很容易记住了。

每当您使用 ExtJS 时,请记住 docs 是您的朋友!

【讨论】:

  • 感谢 Brandon Cordell,我尝试使用 API 对象,但它未在网格中显示数据。首先我在控制器文件“movie_controller”上创建,然后在视图/文件夹/创建一个 CTP 文件“读取”,然后在 JS API 对象中我写下读取:{ url:'/movie_controller/read',方法:'GET'} ,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多