栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用AJAX和CakePHP保存数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用AJAX和CakePHP保存数据

你很亲近

1.)URL只是/ controller / action。数据以$ this-> data传递,并且在操作中可以神奇地使用。**由于您在助手中列出的是“
Js”而不是“ Javascript”,因此我假设您使用的是Cake 1.3.x和jQuery,因为jQuery是Cake
1.3的默认设置,而Js代替了Javascript / Ajax。

-修复您的助手:

var $helpers = array('Html', 'Form', 'Js'=>array("Jquery"));

-修复您的jQuery:

$.ajax({    url:'/orders/save_column_order',    type:'POST',    data:data});

2.)使用蛋糕的魔力:

function save_column_order() {    if ($this->data != null) {        $this->Model->save($this->data);    // whatever else needs doing...    }}

-因为您正在做ajax,所以您可能不想要Cake的默认视图渲染行为(只是一个猜测。)如果您想完全渲染任何视图,则可能只是ajax回调的标记片段,所以您可能希望将其放置在元素中,而不是完整的视图中:

function save_column_order() {    // ...        $this->set(compact('vars', 'for', 'view'));    $this->render('/elements/new_column_order', 'ajax'); }

-否则,仅抑制渲染:

function save_column_order() {    ...         $this->autoRender = false;}

-如果保存无效,请确保$ this-> data的结构对Cake-save友好。如果您需要查看$ this-> data的内容,Cake的内置调试(从应用程序中的任何位置)将帮助您弄清楚:

debug($this->data);

3)等等,什么?

不确定我是否正确理解您的要求,因此,如果这不能解决您的问题,请说明您要执行的操作?

如果您的意思是,Cake将允许您手动更新表中的记录,是吗?尽管我不确定您为什么要这么做。Cake极其强大的内置ORM是该框架的一半,而其极其全面的魔力是另一半。

您可以使用Model :: sql()方法来编写简单的SQL,尽管不建议这样做,因为它不是OOP或可重用的。

在模型中定义关联时,可以将外键设置为false并指定条件,这些条件的工作方式类似于Cake的自动联接中的嵌套选择。

如果您需要强制加入,Cake的$ options [‘joins’]可以让您完全控制。如果默认的LEFT不能满足您的需要,则可以指定任何类型的JOIN。

您可以使用$ this-> Model-> bind()/
unbind()快速建立和断开模型绑定。您可以指定递归级别,应用可包含行为,指定要选择的字段以及所有条件。

如果需要子查询,而Cake无法正确处理它,则$ dbo-> buildStatement()将构造您的SQL语句,而$ dbo->
expression()将触发它:

function intricate() {    $dbo = $this->Rate->Status->getDataSource();    $subquery = $dbo->buildStatement(        array( 'fields' => array('`Status`.`id`'), 'table' => $dbo->fullTableName($this->Rate->Status), 'alias' => 'Status', 'limit' => null, 'offset' => null, 'joins' => array(), 'conditions' => $subqueryConditions, 'order' => null, 'group' => null ),        $this->Rate->Status        );    $subquery = "Status.id = (".$subquery.")";    $status = $dbo->expression($subquery);    $options['fields']=        array( "Rate.id", "Rate.plan_id", "Rate.status_id","Rate.rate", "Plan.id",  "Plan.company_id", "Plan.name", "Company.id", "Company.name"        );    $options['conditions']=        array( $status,  "Geographical.name LIKE '%{$this->zip}%'"        );    $rates = $this->Rate->find('all', $options);    $this->set(compact('rates'));    }

-如果您的意思是-Cake将允许您即时交换数据库配置,是的。但是,这样做可能会变得非常顽固,尤其是当Cake的魔力成为这种情况的一部分时。

您可以在/app/config/database.php中添加多个数据库配置-

class DATAbase_ConFIG {    var $default = array(        'driver' => 'mysql',        'persistent' => false,        'host'=>'localhost',        'login' => 'cake',    'password' => 'icing',        'database' => 'dev');    var $offsite = array(        'driver' => 'mysql',        'persistent' => false,        'host' => '11.22.33.44', // or whatever        'login' => 'cake',        'password' => 'frosting',        'database' => 'live');}

-根据情况的复杂程度,在控制器/模型中在它们之间进行切换会使情况变得有些紧张:

// Model::getDataSource()->configKeyName holds whichever db config you're usingif ($this->Model->getDataSource()->configKeyName != 'default') {    // do something, for example, change models, tables, reload schema, etc.    $this->loadModel('Special')    $this->Model->table = 'extras';    $this->Model->schema(true);} else {    // predictably, Model::setDataSource($configKey) changes configs    $this->Model->setDataSource('offsite');}

-如果这是您的意思,我可以粘贴几周前编写的代码块,要求将ajax表单提交(在表单完成的两个阶段)保存到2个数据库中的3个表中(其中一个服务我的Cake应用程序,另一个服务于旧版CodeIgniter应用程序)展示了所有这些花式的实际操作,以及一些不错的老式Cake Magic通过保存/更新快捷键的连接。(我还必须生成选择性电子邮件,最后,触发REST请求,将新插入记录的ID传递给CI应用程序以触发其处理。哇!)

无论如何,HTH。:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号