【问题标题】:How can i use Yii widgets and forms?如何使用 Yii 小部件和表单?
【发布时间】:2015-05-24 07:29:26
【问题描述】:

我们如何使用 CMultiFileUpload 小部件和当用户单击提交按钮时上传所有文件的表单?

查看:

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

$this->widget('CMultiFileUpload', array(
    'name' => 'up_files',
    'attribute' => 'files',
    'model' => $model,
    'accept' => 'jpeg|jpg|gif|png', // useful for verifying files
    'duplicate' => 'Duplicate file!', // useful, i think
    'denied' => 'Invalid file type', // useful, i think
));

echo CHtml::submitButton('Submit');
$this->endWidget();
?>

型号:

<?php
class Upload extends CFormModel
{
    public $file;
    //public $file1;
    public function rules()
    {
        return [
            ['file', 'file', 'types'=>'jpg'],
        ];
    }
}

控制器:

<?php
class UploadController extends Controller
{
    function actionIndex()
    {
        $dir = Yii::getPathOfAlias('application.uploads');
        $uploaded = false;

        $model=new Upload();

        if(isset($_POST['Submit'])) {
            //foreach($models as $i=>$model)
            //
            //$files = CUploadedFile::getInstancesByName('file');
            //print_r($model);
            print_r($model);
            //print_r($files);
            /*if($file->validate()){
                $file->file->saveAs($dir.'/'.$file->file->getName());*/
        }else {
            echo 'Error';
        }


            /*$model->attributes=$_POST['Upload'];
            //print_r($files);
            $model->file = CUploadedFile::getInstance($model,'file');
            //$model->file1 = CUploadedFile::getInstance($model,'file');
            //print_r($model->file);

            if($model->validate()){
                    $model->file->saveAs($dir.'/'.$model->file->getName());
            }*/

      $this->render('index', array(
            //'files' => $files,
            'model' => $model,
            //'uploaded' => $uploaded,
            //'dir' => $dir,
       ));
    }
}

我尝试了这段代码,但没有工作。 如何在 yii 中使用表单和小部件?

【问题讨论】:

  • 请粘贴您目前尝试过的代码
  • “不工作”是什么意思?
  • 当我点击提交按钮时,什么也没发生,就是这样!

标签: php yii


【解决方案1】:

好吧,你犯了一些错误:

  • 在视图中,去掉name属性/参数,当你不使用Yii模型时使用它,只是纯HTML。

  • 在控制器上,您现在正在检查是否正在发送数据并将 POST 信息添加到模型中,以便您可以使用它。

所以把它改成这样:

if(isset($_POST['Upload'])) { //model POST
  $model->attributes=$_POST['Upload'];
  print_r($model); //Check the data and do whatever you want
  • 最后,将文件属性设置为安全或必需,以便将其分配给模型。

像这样:

public function rules()
{
    return [
        ['file', 'safe'],
        ['file', 'file', 'types'=>'jpg'],
    ];
}

我建议您关注Yii basic guide,以便您了解该框架的工作原理。

【讨论】:

  • 谢谢,但是 $_POST['U​​pload'] 是空的,而且这段代码仍然不起作用
  • 检查$_POST为什么为空,检查字段名等
  • 再次感谢您,当我使用 activeFileField 时,$_POST 不是空的,但是当我使用此小部件时,$_POST 不是 isset。为什么?我真的不知道
  • 能否将问题更新为新代码?并告诉我生成的html代码中文件上传的“name”属性的内容是什么
  • 在此代码上,单击提交按钮后,$_FILES['up_files'] 不为空,我可以使用 print_r 显示其内容,问题是 isset($_POST['Submit ']) 返回错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多