在我的Web应用程序中,工作流程要求我应该从另一个函数调用一个控制器函数 我应该添加额外的代码或一些配置来继续吗?现在这就是我实施的方式。但是当我点击"保存"按钮什么都没有发生,值只是从表单中变空。
我的代码。我想创建一个模型对象" BookVegetable"内部" ProducerOfferController" 。 我在producerOffer控制器中的代码
public function actionCreate()
{
//$book_vegetable=new BookVegetable;
$model=new BookVegetable;
if(isset($_POST['BookVegetable']))
{
$model->attributes=$_POST['BookVegetable'];
$model->booked_by = Yii::app()->user->id;
$model->save();
if ($model->hasErrors() === false)
{
$this->redirect(Yii::app()->user->returnUrl);
}
}
else
{
Yii::app()->user->setReturnUrl($_GET['returnUrl']);
}
$this->render('book',array('model'=>$model,));
}
我的代码来自视图
<div style='padding-left:50px'>
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array('id'=>'non-ajax_form','enableAjaxValidation'=>false,)); ?>
<p class="help-block">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<?php echo "<br>" ?>
<?php echo CHtml::textField("booked_quantity",$model->booked_quantity); ?>
我的情景
public function actionBookvegetable($id){
$BookVegetable=new BookVegetable;
$model=$this->loadModel($id);
if(isset($_POST['ProducerOffer'],$_POST['BookVegetable']))
{
$model->attributes=$_POST['ProducerOffer'];
$BookVegetable->attributes=$_POST['BookVegetable'];
$BookVegetable->booked_by=Yii::app()->user->id;
$BookVegetable->producer_offer_id=$model->id;
$model->save();
$BookVegetable->save();
if (($model->hasErrors() === false)||($BookVegetable->hasErrors()=== false))
{
$this->redirect(Yii::app()->user->returnUrl);
}
}
else
{
Yii::app()->user->setReturnUrl($_GET['returnUrl']);
}
$this->render('book',array('model'=>$model,'BookVegetable'=>$BookVegetable));
}
<div class="form-actions">
<?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit', 'type'=>'primary', 'label'=> 'Save',)); ?>
我该如何解决这个问题?是否必须添加额外的内容以在另一个控制器中使用一个控制器操作 保存前的网址和按下保存后的网址相同
http://localhost/xxx/producerOffer/bookvegetable/20?returnUrl=%xxx%2FproducerOffer%2Fmanage
答案 0 :(得分:0)
根据您提供的信息..当您到这里时,
http://xxx.yyy.zzz/xxxx/producerOffer/create
实际上它应该显示书的形式,当你点击那里的保存按钮并转到returnUrl。
$这 - &GT;重定向(Yii的::应用程序() - &GT;用户&GT; RETURNURL);
我建议你写下以下内容,
$model->save();
$BookVegetable->save();
if (($model->hasErrors() === false)||($BookVegetable->hasErrors()=== false))
{
$this->redirect(Yii::app()->user->returnUrl);
}
要,
if($model->save() && $BookVegetable->save())
$this->redirect('yourAction'); //if params needed, $this->redirect(array('yourAction', 'id' => $model->id));
当你到这里时,http://xxx.yyy.zzz/xxxx/producerOffer/bookvegetable
您在ActionBookvegetable下编写的代码将会触发。
要确保您的值正确提交,请更改此代码
$model->save();
if ($model->hasErrors() === false)
{
$this->redirect(Yii::app()->user->returnUrl);
}
to,
if($model->save())
$this->redirect('yourAction');
else
print_r(getErrors());
这将打印任何阻止保存模型的错误。试一试后请告诉我。
答案 1 :(得分:0)
在Yii2中执行此操作的一种方法
<强>背景强>
在SiteController中,索引方法从另一个名为voyzes的模型中获取所有对象的记录。
在SiteController中
包括其他型号ex。 Voyzes
现在,在SiteController动作索引方法中,实现代码以访问模型/ SQL / NoSQL或任何内容,并将其设置为数组并将其返回到视图。对于前者
现在,在索引视图中,您应该拥有其他模型的数据。
答案 2 :(得分:-1)
在我的工作中,我在&#34; loadModel&#34;周围有很多逻辑。控制器中的例程以确保登录的用户可以访问特定模型。当我需要访问模型时,我发现这可以从另一个控制器工作,而无需移动或重新复制loadmodel例程:
$caseviewController = Yii::app()->createController('Caseview');
//use this method from caseview controller to securley load case view model
$caseview = $caseviewController[0]->loadModel($caseviewid);