php - 如何解决类型错误:Laravel 中的参数太少而无法运行
问题描述
我正在创建一个网站。在这个网站上,我创建了一个注册表单。所以,我创建了一个名为 saveInvoice 的函数来将所有数据插入数据库。之后,我创建了另一个名为 sendemail 的函数。我已经从 saveInvoice 向 sendmail 函数传递了 2 个参数,如下所示 -
$this->sendemail($request, $total);
但是,当我单击提交按钮时,它给了我这个错误 -
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR)
Type error: Too few arguments to function App\Http\Controllers\InvoicesController::sendemail(), 1 passed and exactly 2 expected
我怎样才能解决这个问题 ??
这是 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);
$Qty = $request->input('Qty');
$price = $request->input('price');
$total = $Qty * $price;
$invoice = new Invoice();
$invoice->invoicereference = $invoiceNo;
$invoice->firstname = $request->fname;
$invoice->save();
if ($invoice == null) {
return redirect()->back()->with('msg', 'invalid request');
} else {
$this->sendemail($request, $total);
return redirect()->route('invoice.preview', $invoiceNo);
}
}
}
这是发送电子邮件功能。
public function sendemail(Request $request, $total)
{
$invoiceNo = $request->input('invoiceNo');
$fname = $request->input('fname');
$sendemail = $request->input('email');
$data = [];
$data['invoiceNo'] = $invoiceNo;
$data['fname'] = $fname;
$data['total'] = $total;
$data['sendemail'] = $sendemail;
Mail::send(['html' => 'mail'], $data, function ($message) use ($data) {
$message->to($data["sendemail"], 'TicketBooker')->subject
('CheapEfares Order Invoice');
$message->from('kistlakall@gmail.com', 'CheapEfares');
});
return Redirect::back();
}
路线。
Route::Post('invoice/addinvoice', [
'uses' => 'InvoicesController@saveInvoice',
'as' => 'invoice.save'
]);
Route::get('sendemail','InvoicesController@sendemail')->name('sendemail');
解决方案
As you are calling function sendemail()
from route. It's passing only one parameter to it like:
sendemail($request);
Also $total
variable not being used in function sendemail()
at all. So remove it or make it optional like:
public function sendemail(Request $request, $total = "") {
$invoiceNo = $request->input('invoiceNo');
$fname = $request->input('fname');
$sendemail = $request->input('email');
$data = [];
$data['invoiceNo'] = $invoiceNo;
$data['fname'] = $fname;
$data['total'] = empty($total) ? 0 : $total;
$data['sendemail'] = $sendemail;
Mail::send(['html' => 'mail'], $data, function ($message) use ($data) {
$message->to($data["sendemail"], 'TicketBooker')->subject
('CheapEfares Order Invoice');
$message->from('kistlakall@gmail.com', 'CheapEfares');
});
return Redirect::back();
}
Also you can pass total variable through routes as well.
Route::get('sendemail/{total}','InvoicesController@sendemail')->name('sendemail');
推荐阅读
- view - EF Core 3.1 导航属性到视图
- asp.net-core-3.1 - 是否可以从 ASP.NET Core 3.1 中的服务类(控制器外部)获取客户端的 IP 地址?
- c# - 如何在 Asp.Net 中间件中引发错误
- wpf - 如何更改视觉状态值并重用具有不同属性值的控件?
- javascript - 如何阻止 Jquery(Ajax)循环数据(包括 PHP)
- python - 试图从网站上抓取链接,在视图页面源中看不到它,但是如果我检查页面上的一个特殊项目,它会显示 href 链接
- visual-studio-code - VS Code 添加多个仓库
- android - 我有一个代码,其中一个 lateinit 变量在它被调用后被初始化,我不知道如何
- image - 从清单构建 Docker 映像
- reactjs - 当我尝试将 API 调用作为道具从一个组件传递到另一个组件时,承诺未决