Language used : JS with React and PHP with Laravel
Resume : After posting an order, I need to send a mail (sendEmailToReferent). I need to pass multiple data from different array/object.
Problem : When I pass the multiple datas I only get the array, but the object is transformed into an empty array.
To know :
- If I only pass “formData” without “allUsers” in my axios request it’s working.
- Log of formData in sendEmailToReferent before post request give me my object
- Log of allUsers in sendEmailToReferent before post request give me my array
- Log of res (return response()->json($request);) in sendEmailToReferent give me
allUsers :
(5) [{…}, {…}, {…}, {…}, {…}]
formData: [] (here empty array)
Here is the onSubmit to post Order function where i get all my datas :
const allUsers = useSelector((state) => state.user?.usersData);
const onSubmit = (data) => {
const datas = data.internOrders;
const formData = new FormData();
formData.append('businessUnit', datas.businessUnit);
formData.append('object', datas.object);
formData.append('userData', JSON.stringify(userData));
dispatch(postInternOrder(formData, allUsers));
};
Then, in my post axios request, i dispatch the sendEmailToReferent with my datas
export const postInternOrder = (formData, allUsers) => async (dispatch) => {
dispatch(setLoading(true));
try {
await axios({
method: 'post',
url: `${process.env.REACT_APP_API_URL}api/order/intern`,
data: formData,
}).then((res) => {
console.log(res);
const userData = res.data;
dispatch(sendEmailToReferent(formData, allUsers));
});
} catch (err) {
console.log(err); }
};
my sendEmailToReferent request
export const sendEmailToReferent =
(formData, allUsers ) =>
async (dispatch) => {
console.log(formData);
try {
axios({
method: 'post',
url: `${process.env.REACT_APP_API_URL}api/mail/referent/toValidate`,
data: { formData, allUsers },
allUsers,
}).then((res) => {
console.log(res);
});
} catch (err) {
console.log(err);
}
};
And then, my laravel function to send a mail
public function NOneReceivedOrder(Request $request)
{
return response()->json($request);
$orderDatas = $request->get('formData');
$allUsers = $request->get('allUsers');
$oneOrder = InternOrders::where('IdSP', $orderDatas['idSP'])->first();
$userDatas = json_decode($orderDatas['userData']);
$referent = $orderDatas['referent'];
$referentDatas = collect($allUsers)->where('displayName', $referent)->first();
Mail::send('ReferentReceivedNewOrderMail', ['referentDatas' => $referentDatas, 'oneOrder' => $oneOrder, 'orderDatas' => $orderDatas], function ($m) use ($userDatas, $referentDatas, $orderDatas) {
$m->from($userDatas->email);
$m->to($referentDatas->email);
$m->subject('TEST');
});
}
What I have already tried :
-
Change the way to get the datas in laravel (
$orderDatas = json_decode($request['formData']);) -
Change the way to send datas in js (
dispatch(sendEmailToReferent(formData : {formData}, allUsers)) -
join the data into an object
const requestData = { formData: formData, allUsers: allUsers, }; axios({ method: 'post', url: `${process.env.REACT_APP_API_URL}api/mail/referent/toValidate`, data: requestData,
And getting the datas in laravel :
$requestData = $request->all();
$orderDatas = $requestData('formData');
$allUsers = $requestData['allUsers'];
but got error “Trying to access array offset on value of type null”