2016-08-20 3 views
4

Ich habe diese Index-Funktion mit Variablen $product, $categories, $most_views, $show, $check, $checkforid.Umgang mit undefinierten Variablen

public function index() 
    { 
     $products=Product::where(['status'=>'1'])->orderBy('most_viewed','desc')->with('category')->get(); 
     $categories=Category::all(); 
     $mostviews=Product::where(['status'=>'On sale'])->orderBy('most_viewed','desc')->limit(10)->get(); 
     $show=Product::orderBy('most_viewed','desc')->with('category') 
                ->with('user') 
                ->with('productbrand.brand')           
                ->first(); 

     if(Auth::check()) 
     { 
      $check=Watchlist::where(['user_id'=>Auth::user()->id])->get()->toArray(); 
      foreach($check as $che) 
      { 
       $checkforid[]=$che['product_id']; 
      } 
     }  

     return View('product.index',['products'=>$products,'mostviews'=>$mostviews,'show'=>$show,'checkforid'=>$checkforid,'categories'=>$categories]); 
    } 

, wenn eine dieser Variablen existieren doesnot,

return View('product.index',['products'=>$products,'mostviews'=>$mostviews,'show'=>$show,'checkforid'=>$checkforid,'categories'=>$categories]); 

ein Fehler nicht definierte Variable und ganze Indexseite dort kommt betroffen ist. also möchte ich die Variable überspringen, die nicht existiert. Was ist die beste Lösung dafür?

Bis jetzt habe ich alle Variablen auf null initialisiert. Wenn eine Variable nicht existiert, wird null übergeben. ist es eine gute Praxis?

public function index() 
    { 
     $products=null; 
     $show=null; 
     $check=null; 
     $checkforid=null; 
     $mostviews=null; 
     $categories=null; 

     $products=Product::where(['status'=>'1'])->orderBy('most_viewed','desc')->with('category')->get(); 
     $categories=Category::all(); 
     $mostviews=Product::where(['status'=>'On sale'])->orderBy('most_viewed','desc')->limit(10)->get(); 

    ... 
} 
+0

möglich duplizieren http://stackoverflow.com/questions/17767094/check-if-array-value-isset-and- is-null –

+0

if (isset ($ someVar)) zu überprüfen –

Antwort

1

Soweit ich sehe, ist Ihr einziges Problem $checkforid. initialisieren Sie es einfach als ein leeres Array:

$checkforid = []; 
if(Auth::check()) 
{ 
    ... 
    $checkforid[]= ... 
    ... 
} 

Eine gute IDE würde warnen und Ihnen sagen, so etwas wie „$checkforid nicht definiert werden könnten“.

+0

Auch die $ check vaiable. – micky

+0

Nein. $ Check ist immer ein Array, wenn auf es zugegriffen wird. –

2

Alle Ihre Variablen werden etwas haben und ich wette, das Problem ist in Aussicht. Also, nur so etwas wie dies in einer Ansicht:

@if (count($products) > 0) 
    @foreach ($products as $product) 
    .... 
@endif 

Oder wenn Sie möchten überprüfen, ob eine Variable in definiert und hat einen Wert:

@if (!empty($someVar)) 
+0

Ich habe das Problem mit '$ check' und' $ checkforid' kennengelernt, wenn if (Auth :: check()) Bedingung fehlschlägt. Diese Variablen sind nicht definiert. Alle anderen Variablen haben etwas – micky

+0

Wenn das Problem in Ihrer Sicht ist, können Sie vereinfachen, die erste zu verwenden '@forelse ($ products als $ product)' dann behandeln mit null unter '@ empty' – Winter

0

Kontrollvariable gesetzt Einsatz,

$data = array(); 
if(isset($products)) 
    $data['products'] = $products; 
... 
return View('product.index', $data); 
+0

die Funktion issetset nicht is_set ... – Jaimin

+0

Entschuldigung, ich korrigiere es jetzt. –

1

diese Lösung Auch dort ist, was meiner Meinung nach ist eleganter:

$products=Product::where(['status'=>'1'])->orderBy('most_viewed','desc')->with('category')->get(); 
    $categories=Category::all(); 
    $mostviews=Product::where(['status'=>'On sale'])->orderBy('most_viewed','desc')->limit(10)->get(); 
    $show=Product::orderBy('most_viewed','desc')->with('category') 
               ->with('user') 
               ->with('productbrand.brand')           
               ->first(); 
    $view = View('product.index',['products'=>$products,'mostviews'=>$mostviews,'show'=>$show,'categories'=>$categories]); 
    if(Auth::check()) 
    { 
     $check=Watchlist::where(['user_id'=>Auth::user()->id])->get()->toArray(); 
     foreach($check as $che) 
     { 
      $checkforid[]=$che['product_id']; 
     } 
     $view->with('checkforid', $checkforid); 
    }  

    return $view; 
Verwandte Themen