【问题标题】:[Laravel][Routing] How to pass param to controller respective with route parameter[Laravel][Routing] 如何通过路由参数将参数传递给控制器
【发布时间】:2020-04-03 04:53:42
【问题描述】:

我遇到了一个问题,虽然我搜索了很多地方但找不到答案。所以,我在这里请求支持。 我想将参数传递给与路由中的参数对应的控制器函数。 请看下面的例子: 我想要这些路由到 Check 控制器,函数 getByTime($time)

Route::get('/hourly', 'Check@getByTime');
Route::get('/daily', 'Check@getByTime');
Route::get('/weekly', 'Check@getByTime');

class Check {
    function getByTime($time) {}
}

示例条件:

hourly: $time=1
daily: $time=24
weekly: $time = 24*7

我的意思是这样的:

Route::get('/hourly', 'Check@getByTime(1)');
Route::get('/daily', 'Check@getByTime(24)');
Route::get('/weekly', 'Check@getByTime(168)');

请帮我解决它。 抱歉我的解释不好,感谢您的帮助。

【问题讨论】:

    标签: laravel-5 routing laravel-routing


    【解决方案1】:

    不确定我是否理解您的确切问题,但这会有所帮助

    Route::get('{slug}', function ($slug){
       if ($slug == "hourly") {
           App::call('App\Http\Controllers\Check@getByTime', [1]);
       } else if ($slug == "daily") {
           App::call('App\Http\Controllers\Check@getByTime', [24]);
       } else if ($slug == "weekly") {
           App::call('App\Http\Controllers\Check@getByTime', [168]);
       }
    });
    

    但您已将其添加到所有路线的顶部。

    【讨论】:

    • 太棒了。我做到了。这就是我需要的。非常感谢你,兄弟。
    • @TinhNV 欢迎 :)
    【解决方案2】:

    这很简单,如果你查看 laravel 文档你会很容易找到解决方案。这里是link

    顺便说一句,你可以像下面这样简单地做到这一点

    Route::get('/hourly/{hour}', 'Check@getByTime');
    Route::get('/daily/{day}', 'Check@getByTime');
    Route::get('/weekly/{week}', 'Check@getByTime');
    
    class Check {
        function getByTime($time) {}
    }
    

    并在 url 中传递参数,如

    http://yourhost/hourly/1
    http://yourhost/daily/24
    http://yourhost/weekly/168
    

    根据您的要求,您可以试试这个:

    Route::get('/hourly', 'Check@getByTime')->defaults('hour', 1);
    

    【讨论】:

    • 嗨,可能是我的错误解释让你误解了我的意思。我的意思是如果你访问http://myhost/hourlygetByTime($time) 将自动获得$time=1
    • 啊!,然后您可以在控制器中使用Route::currentRouteName(); 获取当前路由,然后可以有条件地处理它,例如Route::get('/hourly', 'Check@getByTime')->name('hour'); 之类的东西。
    • 对不起,我可以在控制器中手动完成。但我需要它自动传递和生成。我的意思是,如果你请求/hourly,你的$time 必须是1;如果你请求/daily,你的$time 必须是24....或者类似的东西。示例:函数 getByTime($time) { echo $time * 2;我不想更改函数中的代码,但我还需要: - 请求 http://myhost/hourly ==> 返回 2 - 请求 http://myhost/daily ==> 返回 48
    • 请通过->defaults('hour', 1);查看我的更新答案
    猜你喜欢
    • 2014-10-05
    • 2016-05-16
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多