Где создать файл для пользовательского фильтра css код в phalcon 4? - PullRequest
1 голос
/ 02 марта 2020

Где добавить код фильтра для минимизации кода CSS? Нужно ли регистрировать каталог, et c.? Документация по фильтрам клиентов - в документации все ясно, кроме того, где создавать эти пользовательские классы.

Что я уже сделал:

  1. установлено и настроено java
  2. загружено на сервер yuicompressor-2.4.8.jar
  3. создал каталог помощников в том же месте, что и контроллеры, просмотрев
  4. зарегистрированных помощников в модуле внешнего интерфейса следующим образом: $loader->registerDirs([APP_PATH.'/frontend/helpers/'])->register();
  5. создал файл CssYUICompressor. php в каталоге помощников и добавил к нему код класса из документации
  6. Я пытаюсь запустить его в контроллере следующим образом:
$this->assets->collection('header-css')
->addCss('css/base.css', true)
->addCss('css/style.css', true)        
->join(true)
->setSourcePath(APP_PATH . '/')
->setTargetPath(PUBLIC_PATH . '/assets/css/css.'.$this->config->version.'.css')
->setTargetUri('/assets/css/css.'.$this->config->version.'.css')
->addFilter(
    new CssYUICompressor(
    [
        'java-bin'      => '/usr/local/bin/java',
        'yui'           => '/home/yuicompressor-x.y.z.jar',
        'extra-options' => '--charset utf8',
    ]
));

, но результат выглядит следующим образом:

Fatal error: Uncaught Error: Class 'Frontend\Controllers\CssYUICompressor' not found in /my path/public_html/apps/frontend/controllers/InitController.php

upd

добавлено в файл CssYUICompressor. php "Пространство имен Frontend \ Helpers; "

файл CssYUICompressor. php теперь:

<?php
namespace Frontend\Helpers;

use Phalcon\Assets\FilterInterface;

/**
 * Filters CSS content using YUI
 *
 * @param string $contents
 * @return string
 */
class CssYUICompressor implements FilterInterface
{
    protected $options;

    /**
     * CssYUICompressor constructor
     *
     * @param array $options
     */
    public function __construct(array $options)
    {
        $this->options = $options;
    }

    /**
     * @param string $contents
     *
     * @return string
     */
    public function filter($contents)
    {
        // Write the string contents into a temporal file
        file_put_contents('temp/my-temp-1.css', $contents);

        system(
            $this->options['java-bin'] .
            ' -jar ' .
            $this->options['yui'] .
            ' --type css ' .
            'temp/my-temp-file-1.css ' .
            $this->options['extra-options'] .
            ' -o temp/my-temp-file-2.css'
        );

        // Return the contents of file
        return file_get_contents('temp/my-temp-file-2.css');
    }
}

В модуле прописано следующее:

$loader = new Loader();

$loader->registerNamespaces(
    [
        'Frontend\Controllers' => __DIR__.'/controllers/',
        'Frontend\Models' => __DIR__.'/models/',
        'Frontend\Widgets' => __DIR__.'/widgets/',
        'Frontend\Helpers' => __DIR__.'/helpers/'
    ]
);

$loader->register();

Звоню в контроллер сейчас как это:

$this->assets->collection('header-css')
->addCss('css/base.css', true)
->addCss('css/style.css', true)        
->join(true)
->setSourcePath(APP_PATH . '/')
->setTargetPath(PUBLIC_PATH . '/assets/css/css.'.$this->config->version.'.css')
->setTargetUri('/assets/css/css.'.$this->config->version.'.css')
->addFilter(
    new \Frontend\Helpers\CssYUICompressor(
    [
        'java-bin'      => '/usr/local/bin/java',
        'yui'           => '/home/yuicompressor-2.4.8.jar',
        'extra-options' => '--charset utf8',
    ]
));

Теперь файл подключен, б но он выдает следующую ошибку:

Fatal error: Declaration of Frontend\Helpers\CssYUICompressor::filter($contents) must be compatible with Phalcon\Assets\FilterInterface::filter(string $content): string in /home/devmass/web/dev.loc/public_html/apps/frontend/helpers/CssYUICompressor.php on line 12

Что еще нужно сделать?

1 Ответ

0 голосов
/ 03 марта 2020

publi c фильтр функции ($ contents) => publi c фильтр функции (строка $ contents): строка

...