正确的If-Else获得$ _GET值并在Laravel中使用

时间:2016-04-04 13:00:50

标签: php laravel

我正在创建一个从这条路线获取输入的简单API:

Route::group(['middleware' => ['web']], function () {
  Route::get('api/v1/ct/{dte?}', 'API\APIController@CTIntervalAPICall');
});

我尝试使用不同的if-else方法来查看是否在URL中补充了end_dte。如果是这样,则将dte作为开始日期,将end_dte作为结束日期。

   public function CTIntervalAPICall(Request $dte)
    {
      $date = $dte->dte;
 //   $end_date = $dte->end_dte;
      $end_date = Input::get('end_dte');
      $element_language = $dte->language;
      $element_customer = $dte->customer;
      $element_contract = $dte->contract;
      $element_subcontract = $dte->subcontract;
      $element = $dte->element;
      $ct_interval= CTInterval::select()      
      if(input::has('end_dte')){
        ->where('dte', '>=', $date)
        ->where('dte', '<=', $end_date);
        }
      else {
        ->where('dte', $date);
        }
        if(isset($_GET['customer'])){
        $ct_interval = $ct_interval->where('element_customer', $element_customer);
        }
        if(isset($_GET['contract'])){
        $ct_interval = $ct_interval->where('element_contract', $element_contract);
        }
        if(isset($_GET['subcontract'])){
        $ct_interval = $ct_interval->where('element_subcontract', $element_subcontract);
        }
        if(isset($_GET['language'])){
        $ct_interval = $ct_interval->where('element_language', $element_language);
        }
        if(isset($_GET['element'])){
        $ct_interval = $ct_interval->where('element', $element);
        }
        $ct_interval = $ct_interval->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"?><ctForecast></ctForecast>');
      array_to_xml($ct_interval,$xml_data);
      $result = $xml_data->asXML();
      return Response::make($result, '200')->header('Content-Type', 'text/xml');
    }

它应该使用&gt; = $ date作为开始日期,&lt; = $ end_date作为结束日期IF end_dte被补充,否则它应该只是= $ date。但我遇到了一个错误。我想知道在laravel中这样做的正确方法是什么。

2 个答案:

答案 0 :(得分:0)

没有Laravel专家,但这种语法纯粹是无效的PHP语法

 $ct_interval= CTInterval::select()      
  if(input::has('end_dte')){
    ->where('dte', '>=', $date)
    ->where('dte', '<=', $end_date);
    }
  else {
    ->where('dte', $date);
    }

你可能想告诉我们实际的错误,虽然我很确定它是一个Parse错误。

我认为您的意思是$ct_interval = $ct_interval->where('dte', '>=', $date),而不是随意在代码中提供箭头。

下面两行你以正确的方式使用它。只需终止select语句并将where子句添加到已创建的变量中。

答案 1 :(得分:0)

我设法使用此操作来控制操作员:

 public function CTIntervalAPICall(Request $dte)
    {
      $date = $dte->dte;
      if(Input::get('end_dte')) {
        $end_date = Input::get('end_dte');
        $operator = '>=';
      }
      else {
        $operator = '=';
      }
      $element_language = $dte->language;
      $element_customer = $dte->customer;
      $element_contract = $dte->contract;
      $element_subcontract = $dte->subcontract;
      $element = $dte->element;
      $ct_interval= CTInterval::select()
        ->where('dte', $operator, $date);
        if(isset($_GET['end_dte'])){
        $ct_interval = $ct_interval->where('dte', '<=', $end_date);
        }