Laravel - 重构一个巨大的if语句

时间:2018-04-03 08:13:36

标签: php laravel laravel-5 laravel-4 refactoring

我有一个应用程序,用户可以选择主题和插件,但他们也可以选择这两个。因此,要检查所有可能的选项,我需要一个4子句if语句来检查每种情况。与此同时,这个if语句呈指数级增长,现在它非常大。我使用Repository来对某些位进行重构,但是它仍然太大而且不清楚。这是if语句

public function store(Request $request)
{

    $selectedPlugin = null;
    $selectedPlugins = array();
    $price = null;

    foreach($request->input('plugin') as $key => $value) {
        if ($value === 'selected') {
            $selectedPlugin = $key;

            $plugin = Product::find($selectedPlugin);

            if($plugin == null)
            {
                continue;

            } elseif ($plugin != null) {

                $price += $plugin->price;

                echo "ID: " . $plugin->id . "<br>";
                $selectedPlugins[$plugin->id] = $plugin->toArray();

                $request->session()->put('chosen_plugins.' . 'PluginID' . $plugin->id, $plugin->toArray());
                $request->session()->put('chosen_plugins.' . 'PluginID' . $plugin->id .'.composer_package', $plugin->productable->composer_package);
            }
        }
    }

    if(session()->exists('chosen_plugins') == true) {

        $products = Session::get('chosen_plugins');

        if(session()->exists('chosen_theme') == true)
        {

            $products['theme'] = Session::get('chosen_theme');
            $themePrice = Session::get('chosen_theme')['price'];
            $subtotal = $price + $themePrice;
            $vat = 21/100 * $subtotal;
            $priceSum = $subtotal + $vat;



        }  elseif (session()->exists('chosen_theme') == false) {

            $subtotal = $price;
            $vat = 21/100 * $subtotal;
            $priceSum = $subtotal + $vat;

        }

        $data = [$subtotal, $vat, $priceSum];

        $order =  $this->_orderRepository->createOrderIfSessionExist($data, $products);

        return redirect()->to('/ordersummary/'. $order->id);

    } elseif (session()->exists('chosen_plugins') == false ) {


        if(session()->exists('chosen_theme') == true)
        {

            $theme = Session::get('chosen_theme');

            $subtotal = $theme['price'];
            $vat = 21/100 * $subtotal;
            $priceSum = $subtotal + $vat;

        }  elseif (session()->exists('chosen_theme') == false) {

            $subtotal = 35;
            $vat = 21/100 * $subtotal;
            $priceSum = $subtotal + $vat;

        }

        $data = [$subtotal, $vat, $priceSum];

        $order =  $this->_orderRepository->createOrderIfSessionDoesntExist($data);

        if (session()->exists('chosen_theme') == true) {

            $orderItems = new Orderitems;
            $orderItems->order_id = $order->id;
            $orderItems->product_id = $theme['id'];
            $orderItems->price = $theme['price'];
            $orderItems->save();

            return redirect()->to('/ordersummary/'. $order->id);

        } elseif (session()->exists('chosen_theme') == false) {

            return redirect()->to('/ordersummary/'. $order->id);
        }

    }

}

我需要一些帮助来重构这个if语句。提前谢谢!

0 个答案:

没有答案