已解决:全局中间件$ 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()
{
}
}