从控制器到视图页面的传递变量显示未定义的变量

时间:2018-08-19 07:29:11

标签: php laravel laravel-5

我已将变量temp从控制器传递到查看页面。 在调试搜索方法时,我正在从数据库获取数据到变量temp。 当我将此变量传递给查看页面时,它显示错误为

 ErrorException (E_ERROR)
Undefined variable: temp (View: C:\xampp\htdocs\laravel\lsapp\resources\views\pages\MySearch.blade.php)

我怀疑该错误最有可能是由于route配置造成的,但我不确定。可能还有其他错误。但是将变量从控制器传递到视图页面的过程是相同的,但是我也遇到了错误。

控制器代码块

public function searchDev()
    {
        return view ( 'pages.MySearch');
    }
public function search(Request $request)
{
    $UserName = $request->input('MyName');

    if($UserName != ""){
        $temp = temp::where ( 'NAME', 'LIKE', '%' . $UserName . '%' )->get (['id','NAME','CONTACT','TEMP_ADDRESS']);
        if (count ( $temp ) > 0)
        {
            /*
                getting result from database
                dump($temp);                 
                return response()->json($temp);
                 */
            return view('pages.MySearch', [
                'temp' => $temp
            ]);
        }                
        else
        {
            return view ( 'pages.MySearch')->with('alert-danger', 'Sorry No details found');
        }

    }
}

查看页面代码块

@foreach($temp as $data)
 <tr>
      <td> {{$data['NAME']}} </td>
     <td> {{$data['CONTACT']}} </td>
     <td> {{$data['TEMP_ADDRESS']}} </td>
</tr>
@endforeach

路线代码

Route::get('/MySearch','MyController@searchDev');
Route::post('/MySearch','MyController@search');

该错误是一般性错误,但我无法调试该错误是什么原因。请帮忙!!!

2 个答案:

答案 0 :(得分:2)

在您的else部分中,您没有传递任何变量

所以请改用它

return view ( 'pages.MySearch', compact('temp'))->with('alert-danger', 'Sorry No details found');

对于刀片:

 @foreach($temp as $data)
 <tr>
      <td> {{$data->name}} </td>
     <td> {{$data->CONTACT}} </td>
     <td> {{$data->TEMP_ADDRESS}} </td>
</tr>
@endforeach

答案 1 :(得分:2)

由于并非总是将temp变量传递给视图,因此在刀片视图中使用它之前,必须检查该变量是否存在。 在刀片

中的任何位置使用$ temp变量之前,请检查是否存在$ temp变量
@if(isset($temp))
@foreach($temp as $data)
 <tr> 
       <td> {{$data['NAME']}} </td>
       <td> {{$data['CONTACT']}} </td> 
       <td> {{$data['TEMP_ADDRESS']}} </td> 
</tr>
@endforeach
@endif

或者,您应该在刀片视图开始时检查是否存在变量,或者为变量分配一些默认值,以使页面不会中断。

@php
$temp = isset($temp) ? $temp : [];
@endphp