2016-10-28 92 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')) 

希望这有助于!

相关问题