Почему не грузится картинка?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Почему не грузится картинка?

Сообщение Sergalas »

пытаюсь организовать загрузку вот модель

Код: Выделить всё

class ImageUpload extends Model
{
    public $imageFiles;
    public function rules()
    {
        return [
            [['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }
    public function upload(){
        $uploadPath=\Yii::getAlias('@app').'/web/image/post/'.date('Y').'/'.date('m');
        BaseFileHelper::createDirectory($uploadPath);
        if ($this->validate()) {
            foreach ($this->imageFiles as $file) {
                $imageFile=$uploadPath . '/' . $file->baseName.'.'.$file->extension;
                $file->saveAs($imageFile);
            }
            return true;
        }
        return var_dump($this->getErrors());
    }
}
вот контролер

Код: Выделить всё

class PostController extends Controller
{    
public function actionCreate()
    {
        $model = new Post();
        $imageUpload= new ImageUpload();
        if ($model->load(Yii::$app->request->post())) {
            $imageUpload->imageFiles = UploadedFile::getInstances($imageUpload, 'imageFiles');
            $image=$imageUpload->upload();
            $saves=$model->saves($image,$model);
            if($saves){
                return $this->render('create',[
                    'model' => $model,
                    'imageUpload'=>$imageUpload
                ]);
            }
            return var_dump($image);
        } else {
            return $this->render('create', [
                'model' => $model,
                'imageUpload'=>$imageUpload
            ]);
        }
    }
вот вид

Код: Выделить всё

<div class="post-form">
    <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

    <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
    <?= $form->field($model, 'alias')->textInput(['maxlength' => true]) ?>
    <?= $form->field($model, 'content')->widget(CKEditor::className(), [
        'options' => ['rows' => 6],
        'preset' => 'basic'
    ]) ?>
    <?= $form->field($imageUpload, 'imageFiles[]')->fileInput(['multiple' => true]) ?>
    <?= $form->field($model, 'preview')->widget(CKEditor::className(), [
        'options' => ['rows' => 6],
        'preset' => 'basic'
    ]) ?>
    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end(); ?>
</div>

получаю ошибку please upload file в дебаге
ImageUpload пустой а $_FILE полный почему не подскажите ? И что делать?
maksclub
Сообщения: 18
Зарегистрирован: 2017.07.12, 23:47

Re: Почему не грузится картинка?

Сообщение maksclub »

Может прав на запись нет?
plorvent
Сообщения: 9
Зарегистрирован: 2016.11.01, 22:13

Re: Почему не грузится картинка?

Сообщение plorvent »

Попробуйте вместо

Код: Выделить всё

if ($model->load(Yii::$app->request->post())) {
  //ваш код
}
вставить это

Код: Выделить всё

if ($model->load(Yii::$app->request->post()) && $imageUpload->load(Yii::$app->request->post())) {
  //ваш код
}
линк на доку для работы с несколькими моделями в одном экшене
http://www.yiiframework.com/doc-2.0/gui ... odels.html
Idaho
Сообщения: 58
Зарегистрирован: 2017.04.24, 08:06

Re: Почему не грузится картинка?

Сообщение Idaho »

в CKEditor не работает загрузка картинок как таковая.
тут проблема и решение https://github.com/MihailDev/yii2-ckeditor/issues/15
Аватара пользователя
Chrono_W
Сообщения: 16
Зарегистрирован: 2015.07.28, 20:59

Re: Почему не грузится картинка?

Сообщение Chrono_W »

ТАкже вопрос по картинкам
есть путь и собственно картинка, к примеру: $file = "/files/projects/123.jpg";

почему file_exists($file) возвращает false из за того что стоит первым символом / и true если его нет

НО при этом, при выводе картинки

Код: Выделить всё

Html::img($file, ['alt' => 'изображение', 'id'=>'preview'])
без превого слеша картинка не выводится и постоянно нужно для проверки file_exists() слеш убирать, а для вывода Html::img оставлять..
как это обобщить??? чтоб везде можно было выводить либо со слешем, либо везде без первого слеша, чтоб не делать постоянные проверки

если использовать так $file = "files/projects/123.jpg";
то соответственно file_exists($file) - норм, вернет true
но при выводе самой картинки нужно дописывать "/"

Код: Выделить всё

Html::img("/".$file, ['alt' => 'изображение', 'id'=>'preview'])
может в конфиге что то прописать?
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Почему не грузится картинка?

Сообщение Йож »

Chrono_W писал(а): 2017.08.12, 18:43 нужно для проверки file_exists() слеш убирать, а для вывода Html::img оставлять..
ведь для file_exists используется серверный путь вида /home/admin/web/site.ru/public_html/file.jpg
А для Html::img web-путь вида /file.jpg
Ответить