patternphplaravelMinor
Collection of $_POST data
Viewed 0 times
datacollection_post
Problem
I have a backend API that I'm sure can a refactor, but I'm not exactly sure how to avoid repetition between the
```
public function store(Request $request)
{
$customer_service = new QuickBooks_IPP_Service_Customer();
$input = $request->all();
$is_same_address = isset($input['customer']['isSameAddress']) ? $input['customer']['isSameAddress'] : '';
$name = ucwords(strtolower($input['customer']['name']));
$company = isset($input['customer']['company']) ? $input['customer']['company'] : '';
$company = ucwords(strtolower($company));
$primary_phone = isset($input['customer']['primaryPhone']) ? $input['customer']['primaryPhone'] : '';
$secondary_phone = isset($input['customer']['secondaryPhone']) ? $input['customer']['secondaryPhone'] : '';
$email = isset($input['customer']['email']) ? $input['customer']['email'] : '';
$note = isset($input['customer']['note']) ? $input['customer']['note'] : '';
$ref = isset($input['customer']['ref']) ? $input['customer']['ref'] : '';
$pickup_city = isset($input['customer']['address']['pickup']['city']) ? $input['customer']['address']['pickup']['city'] : '';
$pickup_state = isset($input['customer']['address']['pickup']['state']) ? $input['customer']['address']['pickup']['state'] : '';
$pickup_number = isset($input['customer']['address']['pickup']['number']) ? $input['customer']['address']['pickup']['number'] : '';
$pickup_suite = isset($input['customer']['address']['pickup']['suite']) ? $input['customer']['address']['pickup']['suite'] : '';
$pickup_street = isset($input['customer']['address']['pickup']['street']) ? $input['customer']['address']['pickup']['street'] : '';
$pickup_zip = isset($input['customer']['address']['pickup']['zip']) ? $input['customer']['address']['pickup']['zip'] : '';
if (empty(
store method and the update method of this controller. Specifically, the collection of $_POST data is exactly the same. How can duplication be avoided?store```
public function store(Request $request)
{
$customer_service = new QuickBooks_IPP_Service_Customer();
$input = $request->all();
$is_same_address = isset($input['customer']['isSameAddress']) ? $input['customer']['isSameAddress'] : '';
$name = ucwords(strtolower($input['customer']['name']));
$company = isset($input['customer']['company']) ? $input['customer']['company'] : '';
$company = ucwords(strtolower($company));
$primary_phone = isset($input['customer']['primaryPhone']) ? $input['customer']['primaryPhone'] : '';
$secondary_phone = isset($input['customer']['secondaryPhone']) ? $input['customer']['secondaryPhone'] : '';
$email = isset($input['customer']['email']) ? $input['customer']['email'] : '';
$note = isset($input['customer']['note']) ? $input['customer']['note'] : '';
$ref = isset($input['customer']['ref']) ? $input['customer']['ref'] : '';
$pickup_city = isset($input['customer']['address']['pickup']['city']) ? $input['customer']['address']['pickup']['city'] : '';
$pickup_state = isset($input['customer']['address']['pickup']['state']) ? $input['customer']['address']['pickup']['state'] : '';
$pickup_number = isset($input['customer']['address']['pickup']['number']) ? $input['customer']['address']['pickup']['number'] : '';
$pickup_suite = isset($input['customer']['address']['pickup']['suite']) ? $input['customer']['address']['pickup']['suite'] : '';
$pickup_street = isset($input['customer']['address']['pickup']['street']) ? $input['customer']['address']['pickup']['street'] : '';
$pickup_zip = isset($input['customer']['address']['pickup']['zip']) ? $input['customer']['address']['pickup']['zip'] : '';
if (empty(
Solution
I would recommend to go the OOP way and create a class which has all those fields as members. Then you do the initialization once and let the member functions just use the fields. This nicely avoids the code duplication and opens up opportunities for better design in general.
Also the local variable
If you don't want to go the OOP way you can extract a function like this:
Then in
Pardon my rusty PHP.
Also the local variable
$pickup_line1 doesn't seem to be used in store() is this correct?If you don't want to go the OOP way you can extract a function like this:
public function write(Request $request, String $pickup_line1, String $delivery_line1) {
$customer_service = new QuickBooks_IPP_Service_Customer();
$input = $request->all();
$is_same_address = isset($input['customer']['isSameAddress']) ? $input['customer']['isSameAddress'] : '';
$name = ucwords(strtolower($input['customer']['name']));
$company = isset($input['customer']['company']) ? $input['customer']['company'] : '';
$company = ucwords(strtolower($company));
$primary_phone = isset($input['customer']['primaryPhone']) ? $input['customer']['primaryPhone'] : '';
$secondary_phone = isset($input['customer']['secondaryPhone']) ? $input['customer']['secondaryPhone'] : '';
$email = isset($input['customer']['email']) ? $input['customer']['email'] : '';
$note = isset($input['customer']['note']) ? $input['customer']['note'] : '';
$ref = isset($input['customer']['ref']) ? $input['customer']['ref'] : '';
$pickup_city = isset($input['customer']['address']['pickup']['city']) ? $input['customer']['address']['pickup']['city'] : '';
$pickup_state = isset($input['customer']['address']['pickup']['state']) ? $input['customer']['address']['pickup']['state'] : '';
$pickup_number = isset($input['customer']['address']['pickup']['number']) ? $input['customer']['address']['pickup']['number'] : '';
$pickup_suite = isset($input['customer']['address']['pickup']['suite']) ? $input['customer']['address']['pickup']['suite'] : '';
$pickup_street = isset($input['customer']['address']['pickup']['street']) ? $input['customer']['address']['pickup']['street'] : '';
$pickup_zip = isset($input['customer']['address']['pickup']['zip']) ? $input['customer']['address']['pickup']['zip'] : '';
if ($is_same_address) {
$delivery_city = $pickup_city;
$delivery_state = $pickup_state;
$delivery_number = $pickup_number;
$delivery_suite = $pickup_suite;
$delivery_street = $pickup_street;
$delivery_zip = $pickup_zip;
} else {
$delivery_city = isset($input['customer']['address']['delivery']['city']) ? $input['customer']['address']['delivery']['city'] : '';
$delivery_state = isset($input['customer']['address']['delivery']['state']) ? $input['customer']['address']['delivery']['state'] : '';
$delivery_number = isset($input['customer']['address']['delivery']['number']) ? $input['customer']['address']['delivery']['number'] : '';
$delivery_suite = isset($input['customer']['address']['delivery']['suite']) ? $input['customer']['address']['delivery']['suite'] : '';
$delivery_street = isset($input['customer']['address']['delivery']['street']) ? $input['customer']['address']['delivery']['street'] : '';
$delivery_zip = isset($input['customer']['address']['delivery']['zip']) ? $input['customer']['address']['delivery']['zip'] : '';
}
...Then in
store and update just do the minimum code necessary to calculate the $pickup_line and $delivery_line1 and call write.Pardon my rusty PHP.
Code Snippets
public function write(Request $request, String $pickup_line1, String $delivery_line1) {
$customer_service = new QuickBooks_IPP_Service_Customer();
$input = $request->all();
$is_same_address = isset($input['customer']['isSameAddress']) ? $input['customer']['isSameAddress'] : '';
$name = ucwords(strtolower($input['customer']['name']));
$company = isset($input['customer']['company']) ? $input['customer']['company'] : '';
$company = ucwords(strtolower($company));
$primary_phone = isset($input['customer']['primaryPhone']) ? $input['customer']['primaryPhone'] : '';
$secondary_phone = isset($input['customer']['secondaryPhone']) ? $input['customer']['secondaryPhone'] : '';
$email = isset($input['customer']['email']) ? $input['customer']['email'] : '';
$note = isset($input['customer']['note']) ? $input['customer']['note'] : '';
$ref = isset($input['customer']['ref']) ? $input['customer']['ref'] : '';
$pickup_city = isset($input['customer']['address']['pickup']['city']) ? $input['customer']['address']['pickup']['city'] : '';
$pickup_state = isset($input['customer']['address']['pickup']['state']) ? $input['customer']['address']['pickup']['state'] : '';
$pickup_number = isset($input['customer']['address']['pickup']['number']) ? $input['customer']['address']['pickup']['number'] : '';
$pickup_suite = isset($input['customer']['address']['pickup']['suite']) ? $input['customer']['address']['pickup']['suite'] : '';
$pickup_street = isset($input['customer']['address']['pickup']['street']) ? $input['customer']['address']['pickup']['street'] : '';
$pickup_zip = isset($input['customer']['address']['pickup']['zip']) ? $input['customer']['address']['pickup']['zip'] : '';
if ($is_same_address) {
$delivery_city = $pickup_city;
$delivery_state = $pickup_state;
$delivery_number = $pickup_number;
$delivery_suite = $pickup_suite;
$delivery_street = $pickup_street;
$delivery_zip = $pickup_zip;
} else {
$delivery_city = isset($input['customer']['address']['delivery']['city']) ? $input['customer']['address']['delivery']['city'] : '';
$delivery_state = isset($input['customer']['address']['delivery']['state']) ? $input['customer']['address']['delivery']['state'] : '';
$delivery_number = isset($input['customer']['address']['delivery']['number']) ? $input['customer']['address']['delivery']['number'] : '';
$delivery_suite = isset($input['customer']['address']['delivery']['suite']) ? $input['customer']['address']['delivery']['suite'] : '';
$delivery_street = isset($input['customer']['address']['delivery']['street']) ? $input['customer']['address']['delivery']['street'] : '';
$delivery_zip = isset($input['customer']['address']['delivery']['zip']) ? $input['customer']['address']['delivery']['zip'] : '';
}
...Context
StackExchange Code Review Q#95434, answer score: 3
Revisions (0)
No revisions yet.