首页 > 解决方案 > 带条件的 Laravel 路由

问题描述

它(路由:缓存)如何在引擎盖下工作,如果我缓存我的路由,它会破坏逻辑。我有一个网络钩子,可以将数据发送到一条路线。数据仅因对象字段而异。将其拆分到不同的路线是否正确,或者我需要创建索引方法,该方法将通过方法重定向我的逻辑

Route::group(['namespace' => 'Webhook'], function () {

    if (Request::has('message')) {
        Route::post('/', 'WebhookController@message');
    }

    if (Request::has('callback_query')) {
        Route::post('/', 'WebhookController@callback');
    }

});

标签: phplaravelrouteslaravel-6

解决方案


您可以将路线代码缩短为:

Route::group(['namespace' => 'Webhook'], function () {

    Route::post('/', 'WebhookController@handle');

});

并在控制器中做“繁重的工作”:

class WebhookController extends Controller
{
    public function handle(Request $request)
    {
        if ($request->has('message')) {
            return $this->message();
        }

        if ($request->has('callback_query')) {
            return $this->callback();
        }
    }

    public function message();

    public function callback(); 
}

这相当于:

Route::group(['namespace' => 'Webhook'], function () {

    Route::post('/', function(Request $request) {
        if ($request->has('message')) {
            return (new WebhookController)->message();
        }

        if ($request->has('callback_query')) {
            return (new WebhookController)->callback();
        }
    });

});

推荐阅读