Загрузка и отображение изображений не работают - Cakephp

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

Но я не могу загрузить в базу данных

Сообщение об ошибке :

Невозможно преобразовать значение массива типов в строку

Обновлено: когда я пытаюсь обновить профиль пользователя из (функция профиля), я получаю сообщение: Примечание (8): смещение неинициализированной строки: 0 [CORE \ src \ View \ Helper \ UrlHelper.php, строка 174]

Но когда я обновляю профиль от пользователей (функция редактирования) работает нормально

UsersController.php

public function edit($id = null)
{   
    $this->viewBuilder()->setLayout('user');
    $user = $this->Users->get($id, [
        'contain' => []
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
        if ($this->request->data['password'] == '') {
           unset($this->request->data['password']);
        }
          $user = $this->Users->patchEntity($user, $this->request->data);

        if ($this->Users->save($user)) {
            $this->Flash->success(__('The user has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The user could not be saved. Please, try again.'));
        }
    }
    unset($user->password); // Unset the password so nothing is loaded or displayed in the form
    $roles = $this->roles;
    $this->set(compact('user', 'roles'));
    $this->set('_serialize', ['user']);
    $this->set('user_session', $this->request->getSession()->read('Auth.User'));
}


public function profile()
{
    //Set Title
    $this->set('title', 'Profile');
    // Set the layout.
    $this->viewBuilder()->setLayout('user');
    $this->set('user_session', $this->request->session()->read('Auth.User'));

      $Users = TableRegistry::get('Users');

    $user_data = $Users->get($this->request->session()- 
>read('Auth.User.id'));
    if ($this->request->is('put') AND !empty($this->request->getData()) )
    {


        $userdata = $Users->patchEntity($user_data, $this->request->getData(), [
            'validate' => 'update_profile'
        ]);

        if ($userdata->errors())
        {
            // Form Validation TRUE
            $this->Flash->error('Please Fill required fields');
        }else
        {
            $user_data->name    = $this->request->getData('full_name');
            $user_data->username   = $this->request->getData('username');
            $user_data->email   = $this->request->getData('email');
            $user_data->image = $this->request->data['image']['names'];

            //upload image
            if (!empty($this->request->data['file']['names'])){
            $filename = $this->request->data['file']['names'];
            $url = Router::url('/', true) . 'img/' . $filenames;
            print_r($url);
            exit();
            $uploadpath = 'img/';
            $uploadfile = $uploadpath . $filenames;
            if (move_uploaded_file($this->request->data['file']['tmp_name'], $uploadfile)) {
                $user = $this->Users->newEntity();
                $user_data->names = $filenames;
                $user_data->image = $url;
                }
                        }
            // Form Validation FALSE
            if ($Users->save($user_data))
            {
                // User Session Update
                $this->request->session()->write('Auth.User.name', $user_data['full_name']);
                $this->request->session()->write('Auth.User.username', $user_data['username']);
                $this->request->session()->write('Auth.User.email', $user_data['email']);
                $this->request->session()->write('Auth.User.image', $user_data['image']);
                $this->redirect('/Users/Profile');
                $this->Flash->success('User has been Updated.');

            }else{
                $this->Flash->error(__('Unable to update user!'));
            }

        }
    }

    $this->set(compact('user_data'));
    $this->set('_serialize', ['user_data']);
}

UsersTable.php

public function validationUpdate_profile(Validator $validator)
{
    $validator
         // User Funll Name Validation
        ->notEmpty('full_name')
        // User Phone Validation
        ->notEmpty('email')
        ->allowEmpty('image')
        ->allowEmpty('image_dir');
    return $validator;
}

Profile.ctp Я тоже не уверен в этом

Примечание (8): смещение неинициализированной строки: 0 [CORE \ src \ View \ Helper \ UrlHelper.php, строка 174]

<?= $this->Html->image($user_data->image, ['alt' => 'User image','style' => 'height: 250px; width: 100%; display: block;']); ?>

echo $this->Form->create($user_data, ['type'=>'file']);
echo $this->Form->input('image', ['value' => $user_session['image'], 'type'=>'file']);
Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
0
0
329
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Две вещи

1) Как написан ваш код, блок загрузки изображения никогда не вызывается.

Предположим, вы перемещаете блок в место, откуда он вызывается. Это сработало на моей установке. Обратите внимание: мне пришлось внести несколько изменений, чтобы заставить его работать (например, удалить Route и изменить $ this-> request-> getData на $ this-> request-> data).

2) $ this-> request-> data ['image'] - это массив. Если вы пытаетесь сохранить имя файла в $ user_data-> image, вы должны получить $ this-> request-> data ['image'] ['name'].

Вставьте это в нужную область:

        }else
        {
            $user_data->name    = $this->request->data('full_name');
            $user_data->image   = $this->request->data['image']['name'];


            //upload image
            if (!empty($this->request->data['image']['name'])){
                $filename = $this->request->data['image']['name'];
                $url = WWW_ROOT . 'img/' . $filename;
                $uploadpath = 'img/';
                $uploadfile = $uploadpath . $filename;
                if (move_uploaded_file($this->request->data['image']['tmp_name'], $uploadfile)) {
                    $user = $this->Users->newEntity();
                    $user_data->name = $filename;
                    $user_data->image = $url;
                }
            }

            // Form Validation FALSE
            if ($Users->save($user_data))

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

Вот почему я изменил ваш ['файл'] на ['изображение'].

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

    if ($this->request->is('put') AND !empty($this->request->getData()) )
    {
            echo '<pre>';
            print_r($this->request->data);
            print_r($_FILES);
            echo '</pre>';
            die;

Обновление: после обновления профиля, например, когда я изменяю имя, я получаю Уведомление (8): Неинициализированное смещение строки: 0 [CORE \ src \ View \ Helper \ UrlHelper.php, строка 174]

Ishaq Moutanabi Benaissa 28.06.2018 15:52

Можете быть более конкретными? Какая строка является строкой 174 в опубликованном вами коде контроллера?

Quasi635 03.07.2018 08:09

Другие вопросы по теме