【问题标题】:passing variable from controller to view page shows undefined variable将变量从控制器传递到视图页面显示未定义的变量
【发布时间】:2020-11-13 19:29:11
【问题描述】:

我已将变量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');

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

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    由于您并不总是将临时变量传递给视图,因此您必须在刀片视图中使用它之前检查该变量是否存在。 在刀片中的任何位置使用之前检查 $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
    

    【讨论】:

    • 谢谢它解决了我的问题。我想知道,这个代码块做什么@if(isset($temp)),保持这个if我的问题就解决了。请回复。谢谢!!!
    • 如果设置了 $temp 变量并且它不为空,则此条件为真。仅当 $temp 存在时,您的 @foreach 循环才会被执行。您可以在此处找到更多详细信息。 link
    • 谢谢您的解释
    【解决方案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

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 2017-06-06
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      相关资源
      最近更新 更多