【问题标题】:Laravel routing with conditions带条件的 Laravel 路由
【发布时间】:2021-09-30 09:52:33
【问题描述】:

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

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

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

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

});

【问题讨论】:

  • 我不会在路由中处理这个,而是在控制器中处理。
  • 但如何通过 FormRequest 进行验证?如果我将在其中创建 From 请求,这会抛出一个异常,例如($request,应该是 Facade\Http\Request 的实例)我不知道如何通过 FormRequest 验证它,如果索引将接受请求 public function index(Request $request) { if($request->has('message')){ return $this->message($request); } } public function message(MessageRequest $request) { ... }MessageRequest扩展 FromRequest 并具有自定义规则
  • 这是一个不同的问题。考虑打开另一个关于该特定主题的文章。

标签: php laravel routes laravel-6


【解决方案1】:

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

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();
        }
    });

});

【讨论】:

  • 你能解释一下为什么我不应该在我的路由器中传递这个逻辑吗?
  • 这本身并没有错,但对我来说更合乎逻辑的是,因为它只是在路线上,所以路线上显示了这一点。
【解决方案2】:

您可以将中间件用于此类逻辑。

Laravel Middleware

【讨论】:

  • 您可以添加一个代码示例来代替/附加到链接吗?
  • if ($request->input('token') !== 'my-secret-token') { return redirect('home'); } 在中间件中,您可以获取对象数据,然后您可以重定向到所需路由
  • 我不知道它将如何帮助我。只是因为如果我要在中间件中重定向,我应该使用 app(Controller::name)->$methodname($request) 但它也会抛出异常
  • @SachchidaNandSharma 您可以将其添加到您的答案中。如果你不介意听我的建议:我会附上一些周围的代码。
  • 你能解释一下为什么这种逻辑不应该在路由中吗?
猜你喜欢
  • 2020-08-23
  • 2012-11-06
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2020-07-30
  • 2015-11-17
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多