Size: a a a

Laravel для начинающих

2021 May 21

BB

Beamer Beamerboy in Laravel для начинающих
Проблема при отправке email. Генерируется сообщение и  успешно отправляется, также оно кладется   в папку storage, и если допустим его отправить еще раз  там все переменные которые я передаю undefined. Из-за этого я не могу положить их в очередь, кто-нибудь знает как это пофиксить?)
источник

AH

Andrey Helldar in Laravel для начинающих
Как узнаёшь что значение старое? Тоже передаёшь?

Судя по правилу, в базе существует "новый" email у другого юзера.
источник

AH

Andrey Helldar in Laravel для начинающих
Каким образом производишь повторную отправку?

Если переменные undefined, значит нужно смотреть скрипт, который подготавливает письмо к отправке.

В папку кладётся готовый файл вместо фактической отправки (если используешь докер, рекомендую mailhog вместо файловых версий).
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
старое значение передается в  value="{{ $user->email ?? old('email')}}"
источник

AH

Andrey Helldar in Laravel для начинающих
А имена полей правильно прописаны?
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
да
<input type="email" name="email" id="email" class="form-control @error('email') is-invalid @enderror"
              value="{{ $user->email ?? old('email')}}" placeholder="Email">
источник

AH

Andrey Helldar in Laravel для начинающих
Ок. А у нового поля?
источник

BB

Beamer Beamerboy in Laravel для начинающих
Про повторную отправку я образно, при создание сообщения если не имплеминировать очереди, то на mailhog  приходят сообщения, а если из очереди тогда ничего не работает
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
я обновлю одно поле email, в которое подставляется старое значение. Каое еще новое?
источник

AH

Andrey Helldar in Laravel для начинающих
old('email') - это не старое значение. Это значение из браузера при предыдущем заполнении формы пользователем в случае, если бэк вернул ошибку.

https://laravel.com/docs/8.x/requests#old-input
источник

AH

Andrey Helldar in Laravel для начинающих
Какое? Вот это:

пытаюсь игнорировать email при обновлении, если он уже есть (старое значение)
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
Так как правильно сделать для этого проверку? Запутался уже
источник

AH

Andrey Helldar in Laravel для начинающих
Давай с самого начала.

Есть форма для ввода email адреса.

Нужно обновить email адрес у пользователя только если оно не указано у других пользователей.

Так?
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
И если email существует (идет обновление), то в value это значение подставится $user->email
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
да, все так. Если мы меняем email, то он должен быть уникальным.
Если не вводим ничего, то остается, котоый идет из базы $user->email и при нажатии "сохранить" мы его не трогаем, игнорируем. Делаю
'email' => ['sometimes', 'required', 'email', Rule::unique('users', 'email')->ignore($this->id)],
источник

AH

Andrey Helldar in Laravel для начинающих
Если при получении ошибки валидации нужно вернуть последний введённый адрес, то нужно сделать так:

value="{{ old('email', $user->email)}}"

А если нужно всегда выводить то, что в учётке юзера, то:

value="{{ $user->email }}"


Бэкенд:

Правило верно:

'email' => ['required', 'email', Rule::unique('users', 'email')->ignore($this->id)],
источник

AH

Andrey Helldar in Laravel для начинающих
Правило sometimes работает так: если в запросе передан ключ email, то будут выполняться другие правила проверки. Если ключ не передан, то не будет.

В твоём случае, предполагаю, форма отправляется полностью, следовательно правило sometimes будет всегда игнорироваться.
источник

AH

Andrey Helldar in Laravel для начинающих
Валидация верна. А какую ошибку получаешь?
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
Я специально делаю тернарник в поле, так как использую один файл формы как для создания, так и для обновления формы
Поэтому пишу именно
value="{{ $user->email ?? old('email')}}"
источник

LD

Lugovskoy Dmitriy in Laravel для начинающих
А получаю ошибку валидации
Такое значение поля E-Mail адрес уже существует
источник