Php Yii渲染部分不工作

Php Yii渲染部分不工作,php,yii,renderpartial,Php,Yii,Renderpartial,我正在使用renderArial()函数从views->layouts->main.php渲染视图->订阅服务器->表单 我遇到的问题是,我无法使用此方法插入数据。Gii生成的CRUD工作得很好,但当我渲染表单并希望在数据库中插入数据时,它就不工作了。 这是我的密码。 main.php 订阅时事通讯 和_form.php <?php /* @var $this SubscriptionController */ /* @var $model Subscription */ /* @va

我正在使用renderArial()函数从views->layouts->main.php渲染视图->订阅服务器->表单 我遇到的问题是,我无法使用此方法插入数据。Gii生成的CRUD工作得很好,但当我渲染表单并希望在数据库中插入数据时,它就不工作了。 这是我的密码。 main.php


订阅时事通讯
和_form.php

<?php
/* @var $this SubscriptionController */
/* @var $model Subscription */
/* @var $form CActiveForm */
?>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'subscription-form',
    // Please note: When you enable ajax validation, make sure the corresponding
    // controller action is handling ajax validation correctly.
    // There is a call to performAjaxValidation() commented in generated controller code.
    // See class documentation of CActiveForm for details on this.
    'enableAjaxValidation'=>false,
)); ?>



    <?php echo $form->errorSummary($model); ?>


    <div class="row">

        <?php echo $form->textField($model,'email',array('size'=>30,'maxlength'=>30,'placeholder'=>'Email Address')); ?>
        <?php echo $form->error($model,'email'); ?>
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Subscribe' : 'Save',array('class'=>'btn btn-xs btn-success subscribeBtn')); ?>
</div>

<?php $this->endWidget(); ?>

</div>

尝试再添加一个斜杠

$this->renderPartial("//subscription/_form",array('model'=>$model));

正如adamS和Michiel所评论的,如果您想在main.php布局文件中放置表单或数据,应该使用小部件

要创建小部件,您需要执行以下操作:

1:在
/protected/components/
目录中创建一个php文件,类似于
SubscriptionWidget.php

2:在组件目录中创建目录
视图

3:在
/protected/components/views/
中创建view.php文件,类似于
subscriptionWidget.php

4:将以下代码放入
SubscriptionWidget.php
文件中:

<?php 
class SubscriptionWidget extends CWidget
{
    public function init()
    {

    }

    public function run()
    {
        $model = new SubscriptionForm;
        if(isset($_POST['SubscriptionForm']))
        {
            // proces the data
        }
        $this->render('subscriptionWidget', array('model'=>$model));
    }
}
?>
另外,不要忘记将表单放入新创建的视图文件中


希望这有帮助。

这与整个MVC模式背道而驰。您可以更好地使用此表单创建小部件,并将其包含在主布局中,然后进行建模。@Michiel\u表单也是小部件。那么如何使用它呢?同意@Michiel你不应该把这种东西放在你的布局中。@adamS你能建议一个替代答案吗?你的$model来自哪里,你在哪个控制器/动作中声明它?创建一个小部件将允许您指定要使用哪个模型(在小部件类中)保存表单数据。
<?php 
class SubscriptionWidget extends CWidget
{
    public function init()
    {

    }

    public function run()
    {
        $model = new SubscriptionForm;
        if(isset($_POST['SubscriptionForm']))
        {
            // proces the data
        }
        $this->render('subscriptionWidget', array('model'=>$model));
    }
}
?>
<!doctype html>
<html lang="en">
...
<?php $this->widget('SubscriptionWidget'); ?>
...
</html>