Laravel 根据哪个路径路由条件,如何获得正确的路径

Posted

技术标签:

【中文标题】Laravel 根据哪个路径路由条件,如何获得正确的路径【英文标题】:Laravel routes condition based on which path, how to get the right path 【发布时间】:2020-02-05 01:40:06 【问题描述】:

我的路线:

不同视图的路线

Route::get('/participants', 'DatatablesController@getIndex')->name('participants');
Route::get('/completed', 'DatatablesController@getIndex')->name('completed');
Route::get('/failed', 'DatatablesController@getIndex')->name('failed');
//route to get data to views
Route::get('participants_dt', 'DatatablesController@getData')->name('get.survey_requests');

控制器:

public function getData()

    $request = Request::path();
    error_log($request);
    // $request returns participant_dt currently.
    // I want it to return based on which view I'm on.

    if ($request == 'participants') 
        //return query
     elseif ($request == 'complete') 
        //return complete
     else 
        //return failed
    

有没有办法根据它所在的路线命名我的路线?例如如果路由 /complete 被选中,那么路由参与者_dt 将被命名为 complete?

【问题讨论】:

你在哪个视图上是什么意思?你没意见!!视图上的<a href="/participants_dt"></a> 标记与通过localhost:8000/participants_dt 之类的直接URL 访问没有任何区别,您无法分辨出区别 【参考方案1】:

由于您的视图位于不同的路由上,您可以使用之前的 URL 来确定请求来自哪个视图

public function getData()

    $request = url()->previous(); // Get previous URL
    $request = parse_url($request)['path']; // Remove domain name
    $request = ltrim($request, '/'); // Remove first slash
    error_log($request);
    dd($request); // Returns the route where the view is (ex: participants)
    if ($request == 'participants') 
        //return query
     elseif ($request == 'complete') 
        //return complete
     else 
        //return failed
    

希望对你有帮助

【讨论】:

【参考方案2】:

理想情况下,您的路由应该转到控制器中的不同方法。例如:

Route::get('/completed', 'DatatablesController@getCompleted')->name('completed');
Route::get('/failed', 'DatatablesController@getFailed')->name('failed');

然后在你的控制器中:

public function getCompleted() 
    $this->getData('completed');


public function getFailed() 
   $this->getData('failed');


protected function getData($status_type = 'participants')

    if ($status_type == 'participants') 
        //return query
     elseif ($status_type == 'complete') 
        //return complete
     else 
        //return failed
    

希望对您有所帮助。

【讨论】:

我试过了,它从来没有改变 $status_type,只有当 status_type 是参与者时才显示查询。

以上是关于Laravel 根据哪个路径路由条件,如何获得正确的路径的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 路由器中的条件设置控制器

Laravel条件聚合以获得多个金额总和

我如何以正确的方式获得活动路线?

Laravel 4 路由 - 如果条件不满足,则可以跳过路由

Laravel 与 Ajax:不正确的路由

Laravel 子域路由设置