Не работает загрузка файлов

В моделе формы:




	public $image_1 = null;

	public $image_2;

	public $video;




	public function rules()

	{

		return array(

			// username and password are required

			array('image_1, image_2', 'file', 'types'=>'jpg, gif, png, jpeg', 'maxSize' => 10485760, 'allowEmpty' => true),

			array('video', 'file', 'types'=>'avi, mpg, mp4, flv', 'maxSize' => '50485760', 'allowEmpty' => true),

			array('image_1 ,image_2 ,video','safe'),


		);

			

	}

	

private function upload($param,$name){

		$file = CUploadedFile::getInstance($this,$param);

		$name = $name.'.'.$file->getExtensionName();

		$fullname = Yii::app()->basePath.'/../public/upload/patients/'.$name;

		if($file->saveAs($fullname)){

		return $name;

		}else{

		return false;

		}

	}


	public function save_question() 	

	{

		$trans = Yii::app()->db->beginTransaction();

		try {

			$question = new Questions;


			if($this->image_1 !== '') $question->image_1 = $this->upload('image_1', $question->id);

			if($this->image_2 !== '') $question->image_2 = $this->upload('image_2', $question->id);

			if($this->video !== '')   $question->video   = $this->upload('video', $question->id);

			

			if (!$question->insert()) {

				throw new Exception('Error inserting account');

			}

			$trans->commit();

			

		} catch (Exception $e) {

			$trans->rollback();

			die($e);

			return false;

		}

		//die($this->body_part);	

		return true;		

	}




В представлении:




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


    					<div>

                            <h5>Upload your photo(s)</h5>

    						<?php echo $form->fileField($model, 'image_1'); ?> 

    					</div>

    					<div class="foto-pict">

                        	<?php echo $form->fileField($model, 'image_2'); ?> 

    					</div>

                        <div class="foto-pict">

                            <h5>Upload your video</h5>

                        	<?php echo $form->fileField($model, 'video'); ?>

                        </div>

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




На папку upload/patients поставила 777. У напарника работает, у меня - нет. Есть ли в чем-то явная ошибка?

Вы бы отладили и посмотрели, где возникает проблема - в каком методе/строке что-то начинает идти не так :)

А что у нас в контроллере?

Очень похоже на то, что в представлении что-то недописано.

А в контроллере ничего. Загрузка обрабатывается только в моделе формы.


	public function actionIndex()

	{

		$model = new FormaForm;

		$doctor_id = Yii::app()->getRequest()->getParam('id','');

		

		$criteria = new CDbCriteria;

		$criteria->with = array(

		    'body_part','issue'

		);

		$criteria->condition = 'issue.lang = "'.Yii::app()->getRequest()->getParam('language').'" and body_part.id=20' ;

		$issues = JoinIssuesBodyParts::model()->findAll($criteria);

		

		if(isset($_POST['FormaForm'])){

			$model->attributes = $_POST['FormaForm'];

			if($model->validate() && $model->save_question())

			{

			    $this->redirect($this->createUrl('internal/registration'));

			}

		}

		$this->render('forma', array('model'=>$model, 'doctor'=>$this->getDoctor(), 'doctor_id'=>$doctor_id, 'issues'=>$issues, 'body_part'=>$this->getBodyPart()));	

	}




$question = new Questions;

$this->upload('image_1', $question->id);



Если Questions - это модель таблицы БД, то откуда берется id? Обыйчно поле id является AUTO_INCREMENT, т.е. автоматически присваивается после сохранения, а в коде сохранения $question нет.

ПРоблема тем не менее не решена(

У меня была похожая проблема. Но дело было в "косых", в твоем случае тоже как вариант можно попробовать.


$fullname = Yii::app()->basePath.'/../public/upload/patients/'.$name;

‘/’ заменить на DIRECTORY_SEPARATOR. (я сделал прямо в index.php define(‘DS’, DIR…_SEP…))

и лучше, думаю, так:


$fullname = Yii::getPathOfAlias('webroot').DS.'public'.DS. ...

Спасибо большое, таки в пути была ошибка