За последние 24 часа нас посетили 20703 программиста и 1106 роботов. Сейчас ищут 527 программистов ...

Модернизация регистрации

Тема в разделе "Laravel", создана пользователем Dimon2x, 8 окт 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Надо, что бы, когда пользователь добавился в таблицу, сразу после этого, ещё добавилась запись в другую таблицу.

    Делаю так

    PHP:
    1.  protected function create(array $data)
    2.     {
    3.         $newUser = User::create([
    4.             'name' => $data['name'],
    5.             'email' => $data['email'],
    6.             'password' => Hash::make($data['password']),
    7.         ]);
    8.  
    9.        
    10.           DB::table('city_user')->insert(
    11.                 [
    12.                     'user_id' => $newUser->id,
    13.                     'city_id' => 4400,
    14.                    
    15.                 ]);
    16.     }
    Выводит ошибку

    Код (Text):
    1. Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in C:\OSPanel\domains\prorab\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php on line 35
    В гугле это ошибка, есть, но там другая ситуация.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Эта функция вроде как экземпляр юзверя должна возвращать
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Оказывается данные добавляются, но ошибка не уходит
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    @mkramer меня она не должна возвращать
     
    mkramer нравится это.
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    попробуй прочитать текст ошибки.
    я уверен, твоё дбавление чего-то куда-то здесь абсолютно не при чём. у тебя класс не выполняет взятые на себя обязательства по контракту.
    --- Добавлено ---
    раз это "модернизация регистрации", видимо был момент когда всё работало.
    вернись к нему, потом изменяй помалу и проверяй работу после каждого мелкого шага. так найдешь где косяк.
     
  7. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @artoodetoo убираю этот код и всё работает, без ошибок

    PHP:
    1.  DB::table('city_user')->insert(
    2.                 [
    3.                     'user_id' => $newUser->id,
    4.                     'city_id' => 4400,
    5.                  
    6.                 ]);
     
  8. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Dimon2x разберись с интерфейсами. @mkramer уже ответил. Плюс ссылки глянь. Лично я бы делал на евентах
    PHP:
    1. public static function boot()
    2.     {
    3.         parent::boot();
    4.  
    5.         static::created(function($model)
    6.         {
    7.             // dd($model->id);
    8.         });
    9.     }
    Ну а простой способ просто добавь в конце return $newUser
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
  10. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    PHP:
    1.     /**
    2.      * Create a new user instance after a valid registration.
    3.      *
    4.      * @param  array  $data
    5.      * @return \App\User
    6.      */
    7.     protected function create(array $data)
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    @romach развивай мысль
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Так уже три человека написали - надо вернуть юзверя :)
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    вот что говорит поциент
    если тупо убрать код, как Димон говонит, ничего не должно измениться, как был null так и остался null
    имхо пи3дит
    --- Добавлено ---
    @mkramer я пока надеюсь научить его читать.
     
  14. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @artoodetoo соответственно, как уберу, то ставлю return для User::create, как и было из коробки
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @Dimon2x, ну а записанного в переменную юзера ты возвращать не умеешь?

    Твоя проблема - ты не зная на достаточном уровне PHP и программирования в целом пытаешься писать c ларкой чего-то
     
  16. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer я заметил, то, что после регистрации, автоматически происходит авторизация, наверно для этого и надо возвращать?
    --- Добавлено ---
    @mkramer сложно одному учиться, думаю на работе было бы проще
    --- Добавлено ---
    Свершилось чудо, у меня получилось

    PHP:
    1. $newUser = User::create([
    2.             'name' => $data['name'],
    3.             'email' => $data['email'],
    4.             'password' => Hash::make($data['password']),
    5.         ]);
    6.      
    7.           DB::table('city_user')->insert(
    8.                 [
    9.                     'user_id' => $newUser->id,
    10.                     'city_id' => 4400,
    11.                  
    12.                 ]);
    13.          
    14.           return $newUser;
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Я тебя разочарую, никто на таком уровне с тобой возиться не будет.
    --- Добавлено ---
    Именно так. Если это поведение нужно изменить, то надо перекрыть соответствующие методы стандартных трейтов
     
  18. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Вам суперстарам легко говорить.. Ну по крайней мере он уже пытается гуглить. А вообще пока англ не будет программистом не стать.
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    а что тут развивать то? Я тоже не верю )