#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%…
Если вам нужна помощь в этом, объясните, каково желаемое поведение, и попробуйте что-нибудь, а затем покажите нам, где вы застряли с рефакторингом.