【问题标题】:Laravel view Undefined variable: sand_cmonths, I'm new to laravel and PHPLaravel 查看未定义变量:sand_cmonths,我是 laravel 和 PHP 的新手
【发布时间】:2021-01-16 10:10:33
【问题描述】:

我搜索了很多,但没有任何帮助; 我正在使用带有 MySQL DB 的 laravel 7,我是 PHP 和 Laravel 的新手

这是控制器:

class SandController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $sand = Sand::latest()->paginate(10);
        $sand_cmonths = DB::table('sand')
                     ->select(DB::raw('cmonth'))
                     ->groupBy('cmonth')
                     ->get();  
        return view('sand.index')->with(compact('sand','sand_cmonths'));
    }
    public function search(Request $req){

        $search = $req->get('search');

        $sand = DB::table('sand')
             ->where('vehicle_number','LIKE','%'.$search.'%')
             ->orWhere('bill_number', 'LIKE', '%'.$search.'%')
             ->orWhere('per_ton_rate', 'LIKE', '%'.$search.'%')
             ->orWhere('total_weight', 'LIKE', '%'.$search.'%')
             ->orWhere('total_rate', 'LIKE', '%'.$search.'%')
             ->paginate(10);

        return view('sand.index',['sand'=>$sand], compact('search'));
    }
}

这些是我的路线

Route::resource('sand','SandController');
Route::get('/sand','SandController@search')->name('sand.search');

此外,当我禁用搜索路线一切正常时,第二个变量 $SAND_CMONTHS 也正常

【问题讨论】:

  • 您不能使用相同的 URI 前缀。这里/sand/sand 是相同的前缀。我建议你更改第二个路由 URI 前缀,例如 Route::get('/search/sand','SandController@search')->name('sand.search');
  • 但是我需要在同一页面上的搜索路线,当我更改路线时,它会将我带到一个空白的未找到页面
  • Route::get('/sand','SandController@search') 中的 "/sand" 是控制器的 index 方法的默认路由 放置 Route::get('/ sand','SandController@search')->name('sand.search') 位于 Route:: 资源上方,或者将“/sand”更改为其他内容
  • 如果你这样做会和你的资源索引方法冲突sand.index从这里了解更多关于资源控制器laravel.com/docs/7.x/controllers#resource-controllers

标签: php laravel laravel-7


【解决方案1】:

当您定义resource 路由时,Laravel 默认设置一些路由。 当您定义以下内容时:

Route::resource('sand','SandController');

Laravel 会自动创建一个 get 路由,如下所示:

Route::get('/sand','SandController@index');

因此您可以看到您用于搜索的路线已经定义。因此,当您调用搜索路由Route::get('/sand','SandController@index'); 时,首先调用此路由并且它正在访问index 方法。因此sand_cmonths 变量错误。 我建议您更改搜索路线的名称,如下所示:

Route::get('/sand-search','SandController@search')->name('sand.search');

这应该可以正常工作。

【讨论】:

  • 它带我去沙搜索,这是一个空白页
  • ErrorException 未定义变量:sand_cmonths
  • 如果要将搜索结果发送到索引页面。然后你必须将变量命名为相同的名称。
  • search 函数中添加以下行:$sand_cmonths = DB::table('sand') ->select(DB::raw('cmonth')) ->groupBy('cmonth') ->get();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多