Вызов функции-члена all() при исключении строки передается при попытке получить данные $request

#php #laravel

Вопрос:

Что я хочу сделать, так это перехватить данные запроса, поступающие из saveEmployee функции в $data . Я отправляю массив, содержащий employee и skills из функции сохранения как $data .

Это мой ApiConroller . Строка $data = $request->all() выдает ошибку.

 namespace AppHttpControllers;

use IlluminateHttpRequest;

class ApiController extends Controller
{
    public function pushData($request) {
        $data = $request->all();
        Log::info($data);
        LogEmployee::dispatch($data);
    }
}
 

Это моя saveEmployee функция в EmployeeController :

 public function saveEmployee(Request $request) {
    $saveEmployee = Employee::create($request->only(['first_name', 'last_name', 'email', 'employed_at', 'team_manager_flag', 'team_name']));
    $empId = $saveEmployee->id;
       
    foreach ($request->input('skills') as $id) {
        $empskills = new EmployeeSkills();
        $empskills->employee_id = $empId;
        $empskills->skill_id = $id;
        $empskills->save();            
    }
        
    $data = [
        'employee' => $saveEmployee,
        'skills' => $saveEmployee->skills,
    ];

    $this->apiController->pushData(json_encode($data));

    return back()->with('employee_add', 'Employee added successfuly!');
}
 

Я получаю эту ошибку:

Вызов функции-члена all() в строке

Очень благодарен, если кто-нибудь сможет помочь мне решить эту проблему.

Ответ №1:

Прежде всего, НИКОГДА не создавайте контроллер внутри другого контроллера… Перенаправьте, если вы хотите использовать эту логику или извлечь ее в классе (например, a Service class , а не a Service Provider ) и используйте ее…

Итак, вы отправляете $data в ApiController->pushData() метод… но это происходит string потому, что вы json_encode это принимаете…

Следовательно, оно никогда не будет $request->all() действительным… это string

Вам придется провести рефакторинг этого кода, поскольку вы делаете то, чего следует избегать на 100%…

Если вам нужна помощь в этом, объясните, каково желаемое поведение, и попробуйте что-нибудь, а затем покажите нам, где вы застряли с рефакторингом.