#php #image #file-upload #yii
Вопрос:
Я пытаюсь узнать, как загрузить файл изображения в Yii. Я использую этот код
<?php
use yiiwidgetsActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'imageFile')->fileInput() ?>
<button>Submit</button>
<?php ActiveForm::end() ?>
в ProjectFile/views/site/upload.php файл.
Проблема заключается в
<?= $form->field($model, 'imageFile')->fileInput() ?>
$модель выделяет меня красным подчеркиванием. Я посмотрел много примеров, и все они написали примерно так.
Что мне нужно сделать, чтобы остановить эту проблему?
Изменить: Находится внутри controller/SiteController.php
// function for upload
public function actionUploadImage()
{
$model = new UploadImageForm();
if (Yii::$app->request->isPost) {
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
if ($model->upload()) {
// file is uploaded successfully
return;
}
}
return $this->render('upload', ['model' => $model]);
}
Находится внутри models/UploadImageForm.php
<?php
namespace appmodels;
use yiibaseModel;
use yiiwebUploadedFile;
class UploadImageForm extends yiibaseModel
{
public $imageFile;
// gives rules of how to upload picture
public function rules(){
return [
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
];
}
// uploads picture
public function upload(){
if($this->validate()){
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
}
}
}
Комментарии:
1. Вы следовали руководству, как указано в документации ?
2. Красное подчеркивание — вы имеете в виду, что поле ввода файла имеет красную рамку, а под/над/рядом с полем появляется сообщение об ошибке? Если это ваш случай, то у вас есть проблемы с проверкой. Укажите, пожалуйста, метод кода правил вашей модели(который используется в форме).
3. @DefinitelynotRafal Да, я просмотрел документацию, которой вы поделились.
4. @neolodor, какой тип проверки мне нужно использовать?
5. @gun зависит от логики хранения файлов, которую вы хотите реализовать: если вы хотите просто загрузить файл в какой-либо каталог на сервере, следуйте документам yii2 , как я вижу из обновления, вы сделали все в порядке. но: 1. Метод модели
upload
должен возвращать некоторый результат. В вашем случае это ничего не возвращает. 2. После неудачной попытки загрузить файл загляните в журнал ошибок — возможно, у вас возникли проблемы с разрешениями на доступ к файлам.
Ответ №1:
- Пожалуйста, убедитесь, что у модели есть атрибут/поле с именем «Файл изображения».
- Проверьте свой редактор, вы получаете красную строку в своем редакторе, тогда это проблема, связанная с вашим редактором
Ответ №2:
То же самое произошло и со мной, ваш код просмотра довольно хорош. У меня тоже было то же самое, я заставил это работать, используя эти строки в функции модели:
$imageFile= UploadedFile::getInstances($model, 'imageFile')[0];
$imageFile->saveAs('uploads/' . $imageFile->baseName . '.' . $imageFile->extension);
и в действии контроллера:
$model->imageFile= UploadedFile::getInstances($model, 'imageFile')[0];
Ответ №3:
В viewsupload.php красное подчеркивание отображается, потому что система не может найти модель$. Во время работы программа подключит модель $к контроллеру. Таким образом, красное подчеркивание не является проблемой для php-файлов.