2016-10-28 96 views
0

Laravel在其Request類中有一個方法,用於檢查請求中是否存在變量。

$request->has('varnamegoeshere') 

我需要做相反的事情,並檢查請求中是否存在變量。當然,你會覺得下面的工作,但它並不:

if(!$request->has('varnamegoeshere')) 

我怎麼去檢查,如果一個變量不要求存在嗎?

UPDATE:控制器和類代碼如下

控制器

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Project\Frontend\Repo\Vehicle\VehicleInterface; 
use Illuminate\Support\Facades\View; 

class SearchController extends BaseController 
{ 
    protected $vehicle; 

    public function __construct(
     VehicleInterface $vehicle 
    ) 
    { 
     $this->vehicle = $vehicle; 
    } 

    public function index(Request $request) 
    { 
     /* 
     * Search Refinement 
     */ 

     // Set links that will refine user selection when clicked 
     $search = array(); 

     if(!$request->has('make')) 
     { 
      // Fetch makes for user refinement 
      $search['makes'] = $this->vehicle->setMakeLinks($request); 
     } 

     if(View::exists('index')) 
     { 
      return View::make('search') 
       ->with('search', $search); 
     } 
    } 
} 

口才一流

<?php 

namespace App\Project\Frontend\Repo\Vehicle; 

use Illuminate\Database\Eloquent\Model; 

class EloquentVehicle implements VehicleInterface 
{ 
    /** 
    * Protected variables 
    * 
    * @var Model 
    */ 
    protected $vehicle; 

    /** 
    * EloquentVehicle constructor. 
    * 
    * @param Model $vehicle 
    */ 
    public function __construct(
     Model $vehicle 
    ) 
    { 
     $this->vehicle = $vehicle; 
    } 

    /** 
    * Create links based on unique makes retrieved from the database 
    * 
    * @param null $request 
    * @return mixed 
    */ 
    public function setMakeLinks($request = null) 
    { 
     $query = $this->vehicle->groupBy('make') 
      ->orderBy('make', 'asc') 
      ->get(); 

     // Create empty array 
     $links = array(); 

     // Obtain query string 
     $queryString = str_replace($request->url(), '', $request->fullUrl()); 

     foreach($query as $vehicle) 
     { 
      $append = '?make='.$vehicle->make; 
      if ($queryString != '') 
       $append = $queryString.'&make='.$vehicle->make; 

      array_push($links, '<a title="'.$vehicle->make.' for sale" itemprop="brand" href="'.url('usedcars/'.$append.'#searched').'">'.$vehicle->make.'</a>'); 
     } 

     return $links; 
    } 
} 

查看文件

@extends('layouts.template') 

@section('content') 
    @if(isset($search['make'])) 
    <div id="refine" class="makes" itemscope itemtype="http://schema.org/AutomotiveBusiness"> 
     <h2>Find cars by Make</h2> 
     <div id="choices"> 
      @foreach($search['make'] as $link) 
       {!! $link !!} 
      @endforeach 
      <div id="clear-both"></div> 
     </div> 
    </div> 
    @endif 
@endsection 
+0

我假設你注入'Request'類。你所做的沒有任何問題。這就是你如何檢查請求是否有參數。通過文檔'如果該值存在並且不是空字符串,則has方法返回true。問題在於其他地方,因爲這不能正常工作。你確定你正在注入正確的課程嗎? – Andrew

+0

$ request->返回值定義爲bool,這意味着「if(!$ request-> has('varnamegoeshere'))」是正確的。你確定錯誤在那個部分嗎? – Tiega

+0

@Andrew我正在注入正確的課程。我做了一個dd($ request-> all());檢查請求中的內容,並返回一個數組,其中包含URL中存在的$ _GET變量。 – VenomRush

回答

0

我發現我的問題。我的視圖文件中的if語句具有單數「make」而不是複數。

@if(isset($search['make'])) 

應該

@if(isset($search['makes'])) 
0

使用exists而不是has

if (!$request->exists('varnamegoeshere')) 

希望這有助於!

相關問題