Я работаю над созданием формы, в которой я хочу заполнить поля, поступающие из формы (которую я назвал posting.blade.php)
Контроллер, который я использовал для этого:
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'number' => 'required',
'city' => 'required',
'post' => 'required'
]);
Mail::send('emails.posting-message', [
'msg'=> $request->message
], function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('[email protected]')->subject('Contact Message');
});
return redirect()->back()->with('flash_message', 'Thank you for your message');
}
Постановка задачи:
Текущий контроллер ничего не возвращает, так как в строке 'msg'=> $request->message нет сообщения в валидации. Но если я использую
'msg'=> $request->name (возвращает имя)
Мне интересно, какие изменения я должен внести в контроллер, чтобы он возвращал каждое поле, присутствующее в проверке.
Я пробовал с этим, но он возвращает только последнее значение, которое является сообщением.
'msg'=> $request->name,
'msg'=> $request->email,
'msg'=> $request->number,
'msg'=> $request->city,
'msg'=> $request->post
Что значит ИМО?
По моему мнению. :)
Если честно, я не так много работал над Laravel. Мне интересно, можете ли вы указать мне, какие изменения мне нужно внести в код
Чувак, выслушай меня, когда я это скажу, хорошо? Laravel - один из самых проработанных фреймворков, с которыми я работал. Для этого нет ярлыков. Вам нужно это изучить. Я бы порекомендовал следовать руководству, которое они предлагают, в этом laravel-news.com/your-first-laravel-application есть упоминание об использовании функции old() в середине. Потратьте время на это, приятель. Это того стоит.
У вас есть поле формы с названием "сообщение" ???
Попробуйте добавить правило для сообщения ('message' => 'string');






Во-первых, вам нужно добавить ->withInput() в свой редирект:
return redirect()->back()->with('flash_message', 'Thank you for your message')->withInput();
Все отправленные поля формы будут мигать в сеанс.
После перенаправления, чтобы получить значение поля формы с именем, например, title, вы можете использовать помощник old(), например:
<input type = "text" name = "title" value = "{{ old('title') }}">
Вы также можете передать помощнику второй параметр:
<input type = "text" name = "title" value = "{{ old('title', $post->title) }}">
Вы уловили идею.
OP не спрашивает о флэш-сообщении, а спрашивает о сообщении, которое является именем поля в контактной форме и не получает его значение в контроллере.
Похоже, вы пытаетесь взять все входные данные из отправки формы и передать их в шаблон лезвия Laravel под названием posting-message, который используется для создания электронной почты.
Если я правильно понимаю, значит, вы почти у цели - для этого вам просто нужно передать больше переменных в свой шаблон электронной почты. На данный момент вы просто проходите через одну переменную под названием сообщение.
Таким образом, раздел Mail вашего контроллера выглядит примерно так:
Mail::send('emails.posting-message', [
'name'=> $request->name,
'email'=> $request->email,
'number'=> $request->number,
'city'=> $request->city,
'post'=> $request->post
], function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('[email protected]')->subject('Contact Message');
});
Затем в вашем шаблоне электронной почты у вас есть доступ к таким переменным, как {{ $name }}, {{ $email }} и т. д.
p.s. Если вы хотите получить все входные данные и поместить их в массив за один раз в своем контроллере, Laravel предоставляет несколько способов для массового получения входных данных, например:
$allInputs = $request->all();
p.p.s. Подумайте о том, чтобы делать больше Проверка, чем просто обязательный для каждого из ваших входных данных формы, чтобы гарантировать, что данные, предоставленные вашим пользователем, соответствуют вашим ожиданиям, а не злонамеренным или неправильным.
Фрагмент, который вы предоставили, как показано ниже:
'msg'=> $request->name,
'msg'=> $request->email,
'msg'=> $request->number,
'msg'=> $request->city,
'msg'=> $request->post
Указывает, что ключ массива msg перезаписывается 4 раза.
Вместо этого вам нужен следующий подход:
$msg['name'] = $request->name;
$msg['email'] = $request->email;
$msg['number'] = $request->number;
$msg['city'] = $request->city;
$msg['post'] = $request->post;
Во-первых, вам не нужно использовать метод back с redirect, функция back() все равно перенаправит пользователей.
return back()->with('key','Val');
Проверьте это: Старый ввод
Как говорили другие, для отправки строк запроса / входов в файлы cookie используйте функцию withInput() в соответствии с документами, она будет мигать всеми текущими входами:
return back()->with('key','Val')->withInput();
Если бы вы видели блейды регистрации и входа в Laravel по умолчанию, вы бы знали, что можете использовать помощник old() для получения предыдущих значений на основе файлов cookie и сеансов.
'msg'=> $request->name,
'msg'=> $request->email,
'msg'=> $request->number,
'msg'=> $request->city,
'msg'=> $request->post
Есть несколько способов присвоить значение массиву, но помните, что никогда не переопределяйте их таким образом!
Вы можете использовать метод автоматической индексации. Если вы используете $msg[] = $request->bar, он будет индексировать значения от 0 до длины ваших назначений.
$data[] = $request->val1;
$data[] = $request->val2;
...
Но также вы можете определить ключ каждого элемента следующим образом:
$data['name'] = $request->name;
$data['email'] = $request->email;
...
В конце концов, если вы хотите отправить все входы в качестве второго параметра, просто используйте $request->all():
Mail::send('emails.posting-message', $request->all(), function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('[email protected]')->subject('Contact Message');
});
Некоторое время назад я столкнулся с подобной проблемой, и после нескольких попыток я изменил имя поля с message на comments, и это было решением.
Я подозреваю, что message может быть именем переменной, используемым фреймворком в сеансах или что-то в этом роде.
Я надеюсь, что это помогает.
вам нужно добавить метод withInput() в ваш возвращенный ответ как
return redirect()->back()->with('flash_message', 'Thank you for your message')->withInput();
чтобы сохранить ввод из одного запроса во время следующего запроса, вам нужно использовать помощник old(). См. Документацию здесь https://laravel.com/docs/5.6/requests#old-input
<input type = "text" name = "title" value = "{{ old('username') }}">
Laravel автоматически перенаправит пользователя обратно в его предыдущее местоположение. Кроме того, все ошибки проверки будут автоматически перенесены в сеанс. Проверьте документацию здесь https://laravel.com/docs/5.6/validation#quick-displaying-the-validation-errors. Чтобы отобразить сообщение об ошибке проверки, вы можете использовать это так
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
или более конкретно
<input type = "text" name = "title" value = "{{ old('username') }}">
<span class = "error">{{$error->title}}</span>
Первым делом вам нужно проверить имя поля в вашем html, чтобы в его точном сообщении не было пробелов или орфографических ошибок.
Во-вторых, проверьте все поля сообщения, используя
$request->all(); И посмотрите, получите ли вы индекс "сообщения" в массиве постов или нет.
Нет ничего лучше, если вы не добавили поле при проверке, поэтому вы не получите его в POST.
Но поскольку вы работаете с контактной формой, вы должны оставить поле «сообщение» обязательным и добавить его при проверке. Таким образом вы всегда будете получать данные в поле сообщения.
Не могли бы вы также опубликовать html в вопросе, чтобы все узнали о нем больше.
Для другой проблемы с отправкой данных, которые вы уже получаете в почтовый шаблон, вы можете использовать следующий подход.
$msg = array('name' => $request->name,'email' => $request->email,'number' => $request->number,'city' => $request->city,'post' => $request->post,'message'=>$request->message);
Вы можете использовать массив, например
Mail::send('emails.posting-message', [$msg
], function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('[email protected]')->subject('Contact Message');
});
Затем вы можете легко получить доступ ко всем переменным в почтовом шаблоне, чтобы сделать его динамическим.
Насколько я понимаю, вы спрашиваете, как отправить входные данные в почтовый шаблон.
попробуй это;
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'number' => 'required',
'city' => 'required',
'post' => 'required'
]);
Mail::send('emails.posting-message', $request->all(), function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('[email protected]')->subject('Contact Message');
});
return redirect()->back()->with('flash_message', 'Thank you for your message');
}
теперь в электронные письма / сообщение-сообщение.blade.php у вас будет доступ к $ name, $ email, $ number, $ city, $ post и любым другим входным данным, которые вы отправили в запросе.
теперь, если вы хотите восстановить ошибки проверки. использовать этот
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
//you can get the errors with $validator->errors. and redirect/mail as you want.
}
//here the inputs are valid.
Использование старого ввода - лучший способ сделать это. ИМО. Поскольку он усилен самим Laravel. laravel.com/docs/5.6/requests