如何从一个控制器发布到另一个视图?
我有Review
模型和Product
模型。 Review
表单通过窗口小部件显示在Product
视图中,但如何提交表单本身?现在,它没有做任何事情。我可以通过审核/创建提交,但不能通过Product
视图提交。
或者我想在小部件中发帖?
答案 0 :(得分:0)
如果您将以下代码放在 components / ReviewWidget.php 上,则可以实现此目的。我猜你有Review作为模型及其各自的控制器和视图文件在默认位置。
<?php
class ReviewWidget extends CWidget{
public function init() {
return parent::init();
}
public function run(){
$model = new Review;
if (isset($_POST['Review'])) {
$model->attributes = $_POST['Review'];
$model->save();
}
$this->renderFile(Yii::getPathOfAlias('application.views.review'). '/_form.php',array(
'model' => $model,
));
}
}
然后,在视图上的任何位置调用上面的小部件,如下所示,
<?php $this->widget('ReviewWidget'); ?>
它只会处理项目创建。您必须自己创建代码以更新项目。
答案 1 :(得分:0)
在您的控制器操作中,您必须使用函数renderPartial
$this->renderPartial('//views/reviw/_form',array('data' => $data ) );
此函数的第一个参数用于确定要使用的视图:
模块中的绝对视图:视图名称以单斜杠“/”开头。在这种情况下,将在下面搜索视图 当前活动模块的视图路径。如果没有活动模块,则 将在应用程序的视图路径下搜索视图。
应用程序中的绝对视图:视图名称以双斜杠“//”开头。在这种情况下,将搜索视图 在应用程序的视图路径下。此语法已可用 从版本1.1.3开始。
别名视图:视图名称包含点,并引用路径别名。视图文件通过调用
确定 YiiBase :: getPathOfAlias()。请注意,别名视图不能以主题为主 因为他们可以引用位于任意位置的视图文件。相对观点:否则。将在当前活动控制器的视图路径下搜索相对视图。
您也可以在视图中使用此功能。但是,重用视图最方便的方法是创建小部件。