Laravel 5.5:如何从中间件和控制器中的URL获取参数?

时间:2019-01-20 18:31:29

标签: php laravel

已解决:全局中间件$ request为NULL。

请参阅:$request->route() is null in Middleware, how can I filter by route parameters?


序言:我从几天开始学习Laravel。

(我知道这是不安全的,但是我只想更好地理解其逻辑和工作原理),但是我们假设我们有一个基于API的系统。

我们有几个URL /控制器:

/{script}/{secret},例如:

/heater/123456789

/ddns/123456789

/telegram/123456789

因此,如果我们致电heater,则需要:

1-检查秘密(123456789)是否= .env(或其他地方)中的另一个硬编码

2-基于{script}参数调用正确的控制器/服务

这是Route的基本web.php文件:

Route::get('/{script}/{secret}', 'BaseController@getTheScriptFromUrl');

因此,对于第一点,我知道最好使用Middleware

<?php

namespace App\Http\Middleware;

use Closure;

class CheckSecret
{

    /**
     * The secret.
     * TODO: remove from here and move to .env, for example
     *
     * @var string
     */
    private $secret = '123456789';

    /**
     * Handle an incoming request.
     * Check if secret in the params is == to saved secret.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        if ($request->secret == $this->getSecret()) {
            echo 'You can move on!';
        } else {
            echo 'No! You cannot enter!';
        }

        return $next($request);
    }

    /**
     * Get the secret
     *
     * @return string the secret
     */
    private function getSecret()
    {
        return $this->secret;
    }
}

(我也知道我不需要回显,但是返回/重定向,这只是一个测试!)。

如何获取中间件内部的秘密?

2-对于第二个问题,我有一个BaseController来管理正确Controller的正确开始。但是,如何获得所需的脚本?

<?php

/**
 * Base Controller that redirect to right controller,
 * based on the URL params.
 *
 * @author sineverba
 * @since 1.0.0
 */

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BaseController extends Controller
{
    //
    /**
     * Get the param from the URL and redirect to right controller.
     *
     */
    public function getTheScriptFromUrl()
    {
    }
}

0 个答案:

没有答案