Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Yii上传图片显示endWiget()错误_Php_Yii - Fatal编程技术网

Php 从Yii上传图片显示endWiget()错误

Php 从Yii上传图片显示endWiget()错误,php,yii,Php,Yii,嗨,我也有一个问题时,试图上传图片使用的方法 我的行动/模式: class Image extends CActiveRecord { public $foto; ... public function rules() { return array( ... array('foto', 'file', 'types'=>'jpg, gif, png'), ...

嗨,我也有一个问题时,试图上传图片使用的方法

我的行动/模式:

class Image extends CActiveRecord
{
    public $foto;
    ...

    public function rules()
    {
        return array(
            ...
            array('foto', 'file', 'types'=>'jpg, gif, png'),
            ...
        );
    }
}
我的控制器:

class ImageController extends Controller
{
    public function actionCreate()
    {
            $model=new Image;

            // Uncomment the following line if AJAX validation is needed
            // $this->performAjaxValidation($model);

            if(isset($_POST['Image']))
            {
                    $model->attributes=$_POST['Image'];
                    $model->image=CUploadedFile::getInstance($model,'foto');
                    if($model->save())
                            $model->foto->saveAs('productimages');
                            $this->redirect(array('view','id'=>$model->id));
            }

            $this->render('create',array(
                    'model'=>$model,
            ));
    }
}
我的看法是:

<?php $form = $this->beginWidget(
            'CActiveForm',
            array(
                'id' => 'upload-form',
                'enableAjaxValidation' => false,
                'htmlOptions' => array('enctype' => 'multipart/form-data'),
            )
    ); ?>

    <?php echo $form->labelEx($model, 'foto'); ?>
    <?php echo $form->fileField($model, 'foto'); ?>
    <?php echo $form->error($model, 'foto'); ?>

    ...

    <div class="row buttons">
            <?php echo CHtml::submitButton('Submit'); ?>
    </div>

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

...
但当我跑步时,出现了两个问题:

问题1: endWiget()调用[由Ivan Misic解决]

ImageController的视图“/var/www/html/onlineshop-nimalogos/protected/views/image/_-form.php”中包含不正确嵌套的小部件标记。CActiveForm小部件没有endWidget()调用

问题2: 由于问题#1已解决,并且出现了另一个问题,因此图像未保存在我的“productimages”文件夹中


请帮我解决这个问题。非常感谢。

您已经在某处打开了冗余的CActiveForm小部件,您应该查看视图和部分

Yii正在使用gii生成三个视图文件,它们是:

create.php update.php | | | | +-------+-------+ | | _form.php create.php update.php | | | | +-------+-------+ | | _form.php create和update视图呈现的是相同的partial\u表单,因此您应该查看这三个视图以找到多余的beginWidget调用


您在问题中支持的视图应该是_form.php partial view。

根据文件_form.php中的错误信息遵循本教程。该视图不会从控制器的此部分调用。我在创建和更新视图中找到了这个,感谢对renderpartial的描述。现在我明白了。因此,当我们两个或更多视图呈现相同的部分形式时,我们只需要在部分形式调用1个endWidget。是吗?没错,但我不确定这是否是一般规则,因为一些小部件可能支持嵌套。对于小部件CActiveForm,这是无法实现的,因为它仅仅是HTML表单标记的包装,本身不能包含另一个表单标记。可以将partial视为视图的一部分中的代码,这些代码可以在多个视图中重用,或者为了可读性而在单独的文件中移动。因此,您可以在“创建”视图中打开和关闭小部件,但随后需要在“更新”中复制代码,因此,将其放在两个视图都调用的_形式部分中是合乎逻辑的。renderPartial意味着它不会对渲染结果应用布局(不包括页眉和页脚)。为什么我们使用_表单,因为我们的创建和更新操作都有相同的表单。