Как решить тип ошибки: слишком мало аргументов для работы в Laravel - PullRequest
0 голосов
/ 12 июня 2018

Я создаю веб-сайт.На этом веб-сайте я создал регистрационную форму.Итак, я создал функцию saveInvoice для вставки всех данных в базу данных.После этого я создал еще одну функцию под названием sendemail.Я передал 2 аргумента функции sendmail из saveInvoice, как это -

$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);
            }
        }

    }

Вот функция sendemail.

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');

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Не используйте Request в определении функции sendemail (), так как вы уже передаете в него $ request и $ total.Request $ request будет пытаться создать новый объект Request и будет искать его, тогда как вы уже передаете простую переменную.Используйте это так

открытая функция sendemail ($ request, $ total) {.. ..}

0 голосов
/ 12 июня 2018

Укажите значение по умолчанию, чтобы не было необходимости передавать аргумент в функцию

public function sendemail(Request $request = null, $total = '') {}
0 голосов
/ 12 июня 2018

Как вы вызываете функцию sendemail() с маршрута.Он передает только один параметр, например:

sendemail($request);

Также $total переменная вообще не используется в функции sendemail().Поэтому удалите его или сделайте его необязательным, например:

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();
}

Также вы можете передавать итоговую переменную через маршруты.

Route::get('sendemail/{total}','InvoicesController@sendemail')->name('sendemail');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...