繁体   English   中英

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

[英]Proper If-Else in getting $_GET value and use in 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');
    }

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

没有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子句添加到已创建的变量中。

我设法使用这个来控制运算符:

 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);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM