Я не знаю, что это точная проблема в вашем случае, но я покажу вам, что я сделал, чтобы заставить его работать, и это может решить вашу проблему:
приложение/HTTP/Middleware/TestMiddleware.php
<?php namespace App\Http\Middleware;
use Closure;
class TestMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$input = $request->all();
if (isset($input['mod'])) {
list($input['int'], $input['text']) = explode('-', $input['mod']);
unset($input['mod']);
// Input modification
$request->replace($input);
\Log::info($request->all()); // Shows modified request
}
return $next($request);
}
}
приложение/Http/Kernel.php
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
Middleware\TestMiddleware::class, // this line added
];
приложение/Http/routes.php
Route::get('/test', ['uses' => '[email protected]']);
приложение/HTTP/Запросы/SampleRequest.php
<?php namespace App\Http\Requests;
class SampleRequest extends Request
{
public function rules()
{
return [
'int' =>
[
'required',
'integer'
],
'text' => [
'max: 5',
]
];
}
}
приложение/Http/Контроллеры/TestController.php
<?php namespace App\Http\Controllers;
use App\Http\Requests;
class TestController extends \Illuminate\Routing\Controller
{
public function index(Requests\SampleRequest $request)
{
dd($request->all());
}
}
В консоли я запустил composer dump-autoload
.
Теперь, когда я бегу по следующему адресу:
http://testproject.app/test?mod=23-tav
Я получаю от контроллера dd
:
array:2 [▼
"text" => "tav"
"int" => "23"
]
как и ожидалось, и когда я бегу к примеру http://testproject.app/test?mod=abc-tav
я перенаправлены в моем случае, поскольку данные не прошли проверку с SampleRequest
(int
не являются целыми)
Это Laravel 5 или 5,1? – Kyslik
можете ли вы отправить этот метод '$ request-> replace()', чтобы мы могли видеть, что он делает? – djt
Это Laravel 5.1 'replace()' метод построен в Laravel, это не мой собственный метод – Victor