我已经设置了这种通过AJAX更新模型的方法,并试图通过创建一个新模型来扩展它,如果它不存在的话。
public function actionAjaxUpdate($id = null)
{
if($id === null)
$model = new MyObject;
else
$model = $this->loadModel($id);
if(isset($_POST['MyObject']))
{
$model->attributes = $_POST['MyObject'];
$model->save();
}
}
通过AJAX更新时发送的示例网址,最后的数字是型号ID:
/admin/myObject/ajaxUpdate/1
/admin/myObject/ajaxUpdate/2
/admin/myObject/ajaxUpdate/3
...
这里的问题是,虽然在提供ID时更新工作正常,但创建新模型不起作用。由于新项目的ID尚不存在,因此URL路由将返回404:
在此未找到请求的URL / cmsadmin / myObject / ajaxUpdate 服务器
解决这个问题的好方法是什么?
我尝试重载不带$id
参数的相同方法,但PHP不支持重载,如本主题所述:Method overloading in a model of Yii framework
如果需要任何其他信息,请发表评论。
====其他信息====
main.php
<?php
$backend = dirname(dirname(__FILE__));
$frontend = dirname($backend);
Yii::setPathOfAlias('admin', $backend);
return array(
'basePath' => $frontend,
'controllerPath' => $backend . '/controllers',
'viewPath' => $backend . '/views',
'runtimePath' => $backend . '/runtime',
'components' => array(
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false,
'caseSensitive' => false,
'appendParams' => true,
'rules' => array(
'admin/<controller:\w+>/<action:\w+>/<id:\d+>'=>'/<controller>/<action>',
'admin/<controller:\w+>/<action:\w+>'=>'/<controller>/<action>',
...
答案 0 :(得分:2)
我遇到了同样的问题,但我通过id=0
插入了id=1
进行更新。确保id字段设置为自动递增,因此不需要。
现在检查id是否为1然后插入else更新记录。
答案 1 :(得分:1)
你可以像Boniface建议的那样做,传递0作为id,但你必须将你的功能改为
if($id == 0)
这样,如果你传递0作为id,它将检测到并创建一个新对象。
或者你可以传递任何东西(或0)并只使用
if(!$id) {
$model = new MyObject;