Как использовать переменные функции с другой функцией

Я создаю сайт. На этом веб-сайте я создал регистрационную форму. Пользователь может вводить данные, и когда пользователь нажимает кнопку «Отправить», все данные сохраняются в базе данных. Вот моя функция 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');
            });
}

у вас есть отдельный URL / маршрут для функции sendmail?

DsRaj 11.06.2018 11:30

Я полагаю, вы можете передать объект Request своей функции sendemail. Вы пытаетесь это сделать? Где вы называете эту функцию?

David 11.06.2018 11:31

@DsRaj - у меня есть отдельный маршрут для функции sendmail.

Amithash 11.06.2018 11:47

@David - Но как я могу запрашивать объекты в моей функции sendmail ??

Amithash 11.06.2018 11:49

Значит вы хотите сделать редирект с запросом?

DsRaj 11.06.2018 11:50

@DsRaj - Я хочу отправить электронное письмо, используя вводимые пользователем данные. Вот почему я запрашиваю объекты .. Как я могу это сделать ??

Amithash 11.06.2018 11:56

Если функция находится в том же контроллере, то: $ this-> sendemail ($ request); позвони так

DsRaj 11.06.2018 11:59

@DsRaj - Ага, это сработало !! : D

Amithash 11.06.2018 12:54

@Amithash Я добавил ответ с описанием для других пользователей :)

DsRaj 11.06.2018 13:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
9
167
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете вызвать функцию 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); Это сработало для меня ..

Amithash 11.06.2018 12:55

Вы можете просто вызвать этот метод из своего кода и по возвращении этого метода вы можете настроить свой ответ.

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

Нет, теперь я даже не могу отправить электронное письмо. Когда я пытаюсь это сделать, я получаю следующее: Ошибка типа: слишком мало аргументов для работы.

Amithash 12.06.2018 07:08

Вам необходимо установить значение по умолчанию для вашего дополнительного параметра, как в обновленном вопросе stackoverflow.com/q/50809510/5503275, который вам нужен как $ total = null.

DsRaj 12.06.2018 07:11

Да, когда я использовал null, это сработало .. Но теперь я получаю эту ошибку - адрес в указанном почтовом ящике [] не соответствует RFC 2822, 3.6.2. ??

Amithash 12.06.2018 07:21

Хорошо, проверю .. Спасибо !!

Amithash 12.06.2018 07:35

Другие вопросы по теме