Не удалось проверить динамические файловые поля в Yii?

Привет, я пытаюсь проверить активные поля файлового поля, которые были созданы в Yii так динамично.

Я строю с использованием forech для этих входных данных, вопрос в том, что при попытке проверить, когда пользователь выбирает изображение, указать, превышает ли выбранный вами файл допустимый вес, а также, если это правильный формат файла.

Но я не знаю, что я делаю неправильно.

Я попробовал это:
Моя модель

public $image;
public function tableName() {
return 'vrf_image';
}

/**
* @return array validation rules for model attributes.
*/
public function rules() {
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('id_form', 'numerical', 'integerOnly'=>true),
// Pruebas para subir imagen
// Inicio
array(
'image',
'file',
'types'=>'jpg, gif, png',
'allowEmpty'=>true,
'on'=>'update',
'on'=>'insert',
'wrongType'=>'Solo imagenes',

'mimeTypes' => 'image/gif, image/jpeg, image/png',
'wrongMimeType' => 'Invalid mime type',

'maxSize'=>1024*1024*2,
'tooLarge'=>'File has to be smaller than 2MB',
),
array(
'image',
'length',
'max'=>50,
'on'=>'insert,update'
),
array(
'id, image, id_form, id_ques',
'safe',
'on'=>'search'
),
// Fin
);
}

Мои взгляды

<div class="container-fluid">
<div class="row paddings_bottom">
<?php
$hoho = VrfImage::model()->findAll("id_form = $search->id");

$formImage=$this->beginWidget('CActiveForm', array(
'id'=>'verification-form-image',
'action' => Yii::app()->createUrl("backendVerification/default/CreateImage?id=".$modUser->id),
'htmlOptions' => array('enctype' => 'multipart/form-data'),
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'validateOnChange'=>true,
'validateOnType'=>true,
),
));
?>
<div class="col-md-12 col-lg-12">
<table class="table table-bordered" style="margin-bottom: 0;">
<?php
$oo = 0; $ban = 0;
foreach ($numQues as $ii => $NQ){
if($ii==0){
echo '<div class="borTopFormVrf"><span class="White">Company Documentation</span></div>';
}
if($ii <6){
if($oo<2){
if($oo==0){
echo '<tr>';
}
?>
<td class="col-md-6 col-lg-6 nopadd" style="border: 1px solid #000;">
<?php
foreach ($hoho as $key => $value) {
if($hoho[$key]->id_ques == $NQ){
echo '<img src="'.getThemeUri().'/../../VerificationResource/images/'.$hoho[$key]->image.'" style="max-width:100%;">';
$ban = 1;
}
}
if($ban!=1){ echo '<img src="#" style="max-width:100%; visibility: hidden;" id="img_prev'.$ii.'" alt="your image"/>'; }
else{ $ban=0; }
?>
<?php echo $form->HiddenField($modImage,"[".$ii."]id_ques",array('value'=>$NQ)); ?>
<?php echo $formImage->fileField($modImage,'['.$ii.']image', array('class'=>'form-control Borf-c', 'onChange'=>'readURL(this,'.$ii.')')); ?>
<?php echo $formImage->error($modImage,'['.$ii.']image'); ?>
<div class="text-center">
<?php echo $nameQues[$ii]; ?>
</div>
</td>
<?php       if($oo==1){ echo '</tr>'; $oo = -1; }
$oo++;
}}
}
?>
</table>
</div>

<div class="col-md-12 col-lg-12">
<div class="col-md-12 col-lg-12 divTopFormBVrf">
<?php
if(isset($search->id_verifier)){
if($search->id_verifier == userID()){
echo CHtml::submitButton('Save', array('class' => 'btn btn-success btn_create_address btn_create_address_size'));
}
}
?>
</div>
</div>
<?php $this->endWidget(); ?>
</div>

В моем контроллере

public function actionCreateImage($id) {
$form = VrfForm::model()->find("id_user = $id");

$path_picture = realpath(Yii::app()->getBasePath()."/../VerificationResource/images")."/"; //ruta final de la imagen

if(isset($_POST['VrfImage'])) {
foreach ($_POST['VrfImage'] as $key => $value) {
$modImage = new VrfImage;
$modImage->attributes = $value;
//print_r($modImage->validate());
if($modImage->validate()){
echo 'Correcto';
////////////////////////////////////////////////////////////////////
$rnd = rand(0,9999);  // generar números aleatorios entre 0-9999
$uploadedFile=CUploadedFile::getInstance($modImage,'['.$key.']image');
$fileName = "{$rnd}-{$uploadedFile}";  // número aleatorio + nombre de archivo, o se puede usar: $fileName=$uploadedFile->getName();

if(!empty($uploadedFile)) { // Compruebe si el archivo se ha subido o no.
$uploadedFile->saveAs($path_picture.$fileName);
$modImage->image = $fileName;
$modImage->id_ques = $value['id_ques'];
$modImage->id_form = $form->id;

if($modImage->save()) {
//echo ' REVISA!!! <br>';
}
else{
echo $modImage->error();
}
}
////////////////////////////////////////////////////////////////////
}
else{
echo 'Falla';
//$this->redirect($this->createUrl('default/Form'));
}
}
}
//$this->redirect(Yii::app()->user->returnUrl.'backendVerification/default/Form?id='.$id);
}

Но не работает. !!!

Это плохо мои «clientOptions» в форме?
Это плохо мои правила в модели?

Помощь T.T

0

Решение

Ну, я знал, что не нужно использовать Yii для проверки своих полей. Это не будет лучшим способом, но я закончил с этим для проверки, в которой я нуждался.

<div class="container-fluid">
<div class="row paddings_bottom">
<?php
$hoho = VrfImage::model()->findAll("id_form = $search->id");

$formImage=$this->beginWidget('CActiveForm', array(
'id'=>'verification-form-image',
'action' => Yii::app()->createUrl("backendVerification/default/CreateImage?id=".$modUser->id),
'htmlOptions' => array('enctype' => 'multipart/form-data'),
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'validateOnChange'=>true,
'validateOnType'=>true,
),
));
?>
<div class="col-md-12 col-lg-12">
<table class="table table-bordered" style="margin-bottom: 0;">
<?php
$numQues = [11,22,33,44,55,66,77,88,99,111,222,333];
$nameQues = ['Business license','Company code','Tax register','Export license','Joint venture approved certificate','Land certificate','ISO9001:2008','ISO14001;2004','UL certificate','CE certificate','Quality manual','Quality organization'];
$oo = 0; $ban = 0;
foreach ($numQues as $ii => $NQ){
if($ii==0){
echo '<div class="borTopFormVrf"><span class="White">Company Documentation</span></div>';
}
if($ii <6){
if($oo<2){
if($oo==0){
echo '<tr>';
}
?>
<td class="col-md-6 col-lg-6 nopadd" style="border: 1px solid #000;">

<?php
foreach ($hoho as $key => $value) {
if($hoho[$key]->id_ques == $NQ){
echo '<img src="'.getThemeUri().'/../../VerificationResource/images/'.$hoho[$key]->image.'" style="max-width:100%;">';
$ban = 1;
}
}
if($ban!=1){
echo '<img src="#" style="visibility: hidden;" id="img_prev'.$ii.'" alt="your image"/>';
}
else{ $ban=0; }
?>
<?php echo $form->HiddenField($modImage,"[".$ii."]id_ques",array('value'=>$NQ)); ?>
<div class="col-md-12 col-lg-12" style="border-bottom: solid 1px #000;">
<div class="col-md-7 col-lg-7">
<?php echo $formImage->fileField($modImage,'['.$ii.']image', array( 'onChange'=>'readURL(this,'.$ii.')')); ?>
</div>
<div class="col-md-5 col-lg-5">
<?php
if($ban!=1){
echo '<label id="lbl'.$ii.'" style="visibility: hidden;" onclick="kkk('.$ii.')">X</label>';
}
?>
</div>
</div>

<?php echo $formImage->error($modImage,'['.$ii.']image'); ?>
<div class="text-center">
<?php echo $nameQues[$ii]; ?>
</div>
</td>
<?php       if($oo==1){ echo '</tr>'; $oo = -1; }
$oo++;
}}
}
?>
</table>
</div>

<div class="col-md-12 col-lg-12 MT15">
<div class="col-md-2 col-lg-2">
<?php
if(isset($search->id_verifier)){
if($search->id_verifier == userID()){
echo CHtml::submitButton('Save', array('class' => 'btn btn-success btn_formVrf btn_create_address_size GreenVrf'));
}
}
?>
</div>
</div>
<?php $this->endWidget(); ?>
</div>

И позже это с функцией JS:

function readURL(input,num) {
if (input.files && input.files[0]) {
if(input.files[0].type=='image/jpeg' || input.files[0].type=='image/gif' || input.files[0].type=='image/png'){
if(input.files[0].size>1000000){
$('#VrfImage_'+num+'_image').val('');
alert("El archivo supera el peso permitido (1MB)");
return false;
}
else{
var reader = new FileReader();
reader.onload = function (e) {
$('#img_prev'+num).css('visibility','visible');
$('#img_prev'+num).attr('src', e.target.result).width(250).height(250);
$('#lbl'+num).css('visibility','visible');
};
reader.readAsDataURL(input.files[0]);
}
}
else{
$('#VrfImage_'+num+'_image').val('');
alert("El archivo no es una imagen valida\n(debe ser JPG, JPEG, GIF o PNG y pesar maximo 1MB.)");
return false;
}
}
}

function kkk(num){
$('#img_prev'+num).css('visibility','hidden');
$('#img_prev'+num).css('height','27px');
$('#VrfImage_'+num+'_image').val('');
$('#lbl'+num).css('visibility','hidden');
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]