duan19780629 2016-03-14 10:46
浏览 61
已采纳

如果多个$ _GET变量,则缩短if else

I'm using Laravel for an API and trying to fetch multiple _GET variables a user would type.

The code looks like this when all filters are used:

 public function MUIntervalAPICall(Request $dte)
    {
      $date = $dte->dte;
      $element_language = $dte->language;
      $element_customer = $dte->customer;
      $element_contract = $dte->contract;
      $element_subcontract = $dte->subcontract;
      $element = $dte->element;

      //all filters

      if(isset($_GET['customer']) && isset($_GET['language']) && isset($_GET['contract']) && isset($_GET['subcontract']) && isset($_GET['element']))
      {
        $where = ['dte' => $date, 'element_language' => $element_language, 'element_customer' => $element_customer, 'element_contract' => $element_contract, 'element_subcontract' => $element_subcontract, 'element' => $element];
      }

      $mu_interval = MUInterval::select('element_customer', 'element_contract', 'element_subcontract', 'element_language', 'element_site', 'element', 'src_id', 'src_type_id', 'dte', 'intvl', 'val_src_id', 'exception_name', 'duration_seconds', 'duration_fte')
          ->where($where) 
          ->get()->toArray();
      function array_to_xml( $data, &$xml_data ) {
          foreach( $data as $key => $value ) {
              if( is_array($value) ) {
                  $key = 'Exception';
                  $subnode = $xml_data->addChild($key);
                  array_to_xml($value, $subnode);
              } else {
                  $xml_data->addChild("$key",htmlspecialchars("$value"));
              }
           }
      }
      $xml_data = new SimpleXMLElement('<?xml version="1.0"?><muExceptions></muExceptions>');
      array_to_xml($mu_interval,$xml_data);
      $result = $xml_data->asXML();
      return Response::make($result, '200')->header('Content-Type', 'text/xml');
    }

Now a user would want to filter it out only with few variables in place. e.g. date and customer, or language and contract only. I'm currently writing a long block of if-else statements to produce results (really long, to include all possibilities for six $_GET variables):

elseif(isset($_GET['subcontract']) && isset($_GET['element']))
      {
        $where = ['dte' => $date, 'element' => $element, 'element_subcontract' => $element_subcontract];
      }

Is there a shorter method for such a long if-else statements?

  • 写回答

3条回答 默认 最新

  • dongnius85154 2016-03-14 10:49
    关注

    Yes, you should learn about how Laravel validation and form request validation work: https://laravel.com/docs/5.1/validation

    https://laravel.com/docs/5.1/validation#form-request-validation

    It's much shorter and more convenient way to do validation.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错