Повторное использование переменной в другой функции - PullRequest
0 голосов
/ 07 августа 2020

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

public function function1($id)
{
    $data1 = DB::table('table1 as t1')
        ->select("t1.name", "t1.address", "t2.designation")
        ->join('table2 as t2', 't1.name', '=', 't2.name')
        ->where('t2.u_id', $id)
        ->get();
    //dd($data1); //Getting data.

    $data2 = Model::select('service_name', 'service_qty')->where('u_id', $id)->get();
    //dd($data2); //Getting data.

    $this->function2($id, $data1, $data2);
    
    return response()->json(array(
      'data1' => $data1,
      'data2' => $data2
    ));
}
public function function2($id, $data1, $data2)
{
    return response()->json(array(
      'data1' => $data1,
      'data2' => $data2
    ));
}

Но выдает ошибку.

Too few arguments to function App\Http\Controllers\MyController::function2(), 1 passed and exactly 3 expected

Я подозреваю, что это Проблема с параметром маршрута.

Route::get('getData/{id}', 'MyController@function2');

Или более элегантный способ сделать это?

1 Ответ

1 голос
/ 07 августа 2020

Следующее работает для меня на fre sh установке Laravel.

web. php

// define the route to function1
Route::get('/getData/{id}', 'MyController@function1');

MyController . php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyController extends Controller
{
    public function function1($id)
    {
        $data1 = 'abc';
        $data2 = 'xyz';

        /**
         * Commented out as OP doesn't want function1 to call function2
         * as is shown in original question
         */
        // $this->function2($id, $data1, $data2);

        return response()->json(array(
            'data1' => $data1,
            'data2' => $data2
        ));
    }

    public function function2($id, $data1, $data2)
    {
        // This will dump out the incoming data for you to view
        ddd($id, $data1, $data2);

        return response()->json(array(
            'data1' => $data1,
            'data2' => $data2
        ));
    }
}

Обратите внимание, что если вы хотите вызвать function2 через URL-адрес, вам нужно будет определить для него маршрут, например:

Route::get('/getData/{id}/{data1}/{data2}', 'MyController@function2');

Редактировать 1

ОК. Итак, поскольку вы не хотите, чтобы function1 звонил function2, я обновил свой ответ ($this->function2($id, $data1, $data2); удален). function1 вернет ваши значения $data1 и $data2 в вашем ответе JSON. Извлеките их из ответа и используйте их, чтобы позвонить по номеру function2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...