Как передавать данные между промежуточным программным обеспечением и контроллерами? - PullRequest
0 голосов
/ 23 февраля 2019

Я хотел бы высказать несколько мнений о передовых методах передачи данных в / из контроллеров и промежуточного ПО, учитывая, что промежуточное ПО может быть «до» или «после».

В прошлом явнесены изменения в запрос и объединены входы.Однако на этот раз мне нужно решение для промежуточного программного обеспечения «после».Поэтому я бы предпочел не зависеть от запроса после запуска контроллера.

Мой конкретный сценарий - это то, что мой контроллер возвращает ответ обычного представления, а мое промежуточное ПО превращает его в файл PDF.Поэтому мне нужно загрузить бумажный конфиг в контроллер, а также промежуточное программное обеспечение.Конфигурация бумаги меняется от шаблона к шаблону.

Я бы хотел загрузить конфигурацию бумаги в контроллер, а затем ... «вернуть» это промежуточное ПО, каким-то образом скрытое внутри ответа.

1 Ответ

0 голосов
/ 23 февраля 2019
<?php
namespace FuquIo\LaravelPdfMaker;
use Illuminate\Http\Request;
use Closure;

class Middleware{

    public function handle(Request $request, Closure $next){

        /**
        * This is the only way I have found to change
        * inputs without breaking request validation.
        */
        $inputs = $request->request->all();
        $inputs['data_for_controller'] = 'foo bar';
        $request->replace($inputs);

        // run controller
        $response = $next($request);

        //...do something based on x-controller-info...
        $headers = collect($response->headers->all())->only(['x-data-from-controller']);
        //...

        return $response;
    }
}

TheController.php

public function theAction(MyValidRequest $request){
    $from_middleware = $request->data_for_controller;
    return response()         
        ->view('myBladeView', ['display_data' => $from_middleware])
        ->header('x-data-from-controller', 'insecure string for middleware');

}

x-заголовки будут обнаружены Не так уж много ситуаций, когда этот материал x-заголовка должен использоваться.Он пойдет в браузер, поэтому он совершенно не защищен.В моем реальном сценарии использования промежуточное программное обеспечение создает файлы pdf, поэтому x-заголовки будут говорить такие вещи, как «буква» и «пейзаж».Совершенно хорошо, чтобы отправить это, возможно, даже уместно, чтобы отправить.

...