HTML Minifier с использованием Middleware в Laravel - PullRequest
0 голосов
/ 12 октября 2018

Я хочу определить промежуточное ПО с именем minifier для минимизации html для пользователя на сервере и использовать его, например:

Route::middleware('minifier')->view('welcome.blade.php');

приведенный ниже код использует для минимизации html:

function minifyHTML($htmlString)
{
    $replace = [
        '<!--(.*?)-->' => '', //remove comments
        "/<\?php/" => '<?php ',
        "/\n([\S])/" => '$1',
        "/\r/" => '', // remove carriage return
        "/\n/" => '', // remove new lines
        "/\t/" => '', // remove tab
        "/\s+/" => ' ', // remove spaces
    ];
    return preg_replace(array_keys($this->replace), array_values($this->replace), $htmlString);
}

Я создал промежуточное программное обеспечение, но я не знаю, как его использовать.

 public function handle($request, Closure $next,$htmlString)
{
    $replace = [
        '<!--(.*?)-->' => '', //remove comments
        "/<\?php/" => '<?php ',
        "/\n([\S])/" => '$1',
        "/\r/" => '', // remove carriage return
        "/\n/" => '', // remove new lines
        "/\t/" => '', // remove tab
        "/\s+/" => ' ', // remove spaces
    ];
    return preg_replace(array_keys($this->replace), array_values($this->replace), $htmlString);
}

предположим, что это правда, как я могу использовать его для минимизации HTML?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

У меня есть публичный пакет для Laravel, который делает именно это, но давайте предположим, что мы используем ваш код ...: -)

Но ваш код неверен, как указано в другом ответе.Вам также необходимо позвонить в Closure.

Итак, сначала убедитесь, что вы изменили содержание вашего метода handle.И после этого давайте сосредоточимся на вашем вопросе: как использовать ваш код ... ;-)

Вот как вы создаете промежуточное ПО в Laravel.

Сначала создайте класс промежуточного программного обеспечения с помощью самого artisan....

php artisan make:middleware MinifyHtml

Класс создан для вас в правильном месте.Поместите ваш метод handle в этот класс.Добавьте класс в kernel.php

protected $middleware = [
    ...
    MinifyHtml::class,
    ...
];

И промежуточное ПО используется, как вы и просили ... ;-)

О вашем методе дескриптора

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

    $response = $next($request);
    $content = $response->getContent();
    $output = .... your code ....
    $response->setContent($output);
    return $response;
}

Объяснение:

  • Сначала вызовите нисходящий код, чтобы получить ответ, необходимый для минимизации
  • Затем получите содержимое из этого ответа
  • минимизировать этот контент
  • вернуть минимизированный контент обратно в ответ
  • вернуть ответ

Кстати, это псевдокод, поэтому вам нужно настроить егонемного, чтобы wotk, но это даст вам общее представление о том, как действовать

0 голосов
/ 12 октября 2018

Вы должны определить дескриптор метода следующим образом:

public function handle($request, Closure $next, $guard = null)
{
    // get response
    $response = $next($request);

    // get content (I assume you use only HTML view)
    $content = $response->getContent();

    // here you use your algorithm to modify content
    $modifiedContent = $this->minifyHTML($content)

    // here you set modified content for response
    $response->setContent($modifiedContent);

    // finally you return response with modified content
    return $response;
}
...