Я создаю сайт. На этом веб-сайте я создал регистрационную форму. Пользователь может вводить данные, и когда пользователь нажимает кнопку «Отправить», все данные сохраняются в базе данных. Вот моя функция saveInvoice. На моей странице просмотра я использовал saveInvoice в качестве своего действия. Затем я использовал входные данные запроса в этой функции.
public function saveInvoice(Request $request)
{
if (Auth::user())
{
$settings = Setting::find(1);
$invoiceNo=$settings->invoiceprefix.''.str_pad($settings->invoiceno, $settings->invoicepadding, 0, STR_PAD_LEFT);
$invoice= new Invoice();
$invoice->invoicereference=$invoiceNo;
$invoice->firstname=$request->fname;
$invoice->lastname=$request->lname;
$invoice->save();
$settings->invoiceno=$settings->invoiceno+1;
$settings->update();
if ($invoice == null){
return redirect()->back()->with('msg','invalid request');
}
else{
return redirect()->route('invoice.preview',$invoiceNo);
}
}
}
Но теперь я хочу создать еще одну функцию под названием sendemail. В этой функции я хочу использовать вводимые пользователем данные, которые пользователь заполнил в этой регистрационной форме. Могу ли я получить эти входные данные запроса из этой вышеупомянутой функции или есть другой метод?
public function sendemail(Request $request) {
$invoiceNo = $request->input('invoiceNo');
$fname = $request->input('fname');
$Qty = $request->input('Qty');
$price = $request->input('price');
$sendemail = $request->input('email');
$data = [];
$data['invoiceNo'] = $invoiceNo;
$data['fname'] = $fname;
$data['Qty'] = $Qty;
$data['price'] = $price;
$data['sendemail'] = $sendemail;
Mail::send(['text' => 'mail'], $data, function ($message) use ($data) {
$message->to($data["sendemail"], 'TicketBooker')->subject
('CheapEfares Air Ticket');
$message->from('[email protected]', 'CheapEfares');
});
}
Я полагаю, вы можете передать объект Request своей функции sendemail. Вы пытаетесь это сделать? Где вы называете эту функцию?
@DsRaj - у меня есть отдельный маршрут для функции sendmail.
@David - Но как я могу запрашивать объекты в моей функции sendmail ??
Значит вы хотите сделать редирект с запросом?
@DsRaj - Я хочу отправить электронное письмо, используя вводимые пользователем данные. Вот почему я запрашиваю объекты .. Как я могу это сделать ??
Если функция находится в том же контроллере, то: $ this-> sendemail ($ request); позвони так
@DsRaj - Ага, это сработало !! : D
@Amithash Я добавил ответ с описанием для других пользователей :)






Вы можете вызвать функцию sendemail в функции saveInvoice, а затем передать объект запроса в функцию sendemail, например
public function saveInvoice(Request $request){
//save invoice code
if ($invoice == null){
return redirect()->back()->with('msg','invalid request');
}
else{
$this->sendemail(Request $request);
return redirect()->route('invoice.preview',$invoiceNo);
}
}
Я предполагаю, что обе функции находятся в одном классе, или один класс расширяет другой класс
Я использовал без запроса вот так - $ this-> sendemail ($ request); Это сработало для меня ..
Вы можете просто вызвать этот метод из своего кода и по возвращении этого метода вы можете настроить свой ответ.
$this->sendemail($request); // $this just because it is on same controller or basecontroller
// For example
public function saveInvoice(Request $request){
.
.
.
$sendMail = $this->sendemail($request);
if ($sendMail == 'success'){
// On success
} else {
// On Error
}
}
public function sendemail(Request $request) {
.
.
.
return 'success';
}
Нет, теперь я даже не могу отправить электронное письмо. Когда я пытаюсь это сделать, я получаю следующее: Ошибка типа: слишком мало аргументов для работы.
Вам необходимо установить значение по умолчанию для вашего дополнительного параметра, как в обновленном вопросе stackoverflow.com/q/50809510/5503275, который вам нужен как $ total = null.
Да, когда я использовал null, это сработало .. Но теперь я получаю эту ошибку - адрес в указанном почтовом ящике [] не соответствует RFC 2822, 3.6.2. ??
Хорошо, проверю .. Спасибо !!
у вас есть отдельный URL / маршрут для функции sendmail?