Где добавить код фильтра для минимизации кода CSS
? Нужно ли регистрировать каталог, et c.? Документация по фильтрам клиентов - в документации все ясно, кроме того, где создавать эти пользовательские классы.
Что я уже сделал:
- установлено и настроено java
- загружено на сервер
yuicompressor-2.4.8.jar
- создал каталог помощников в том же месте, что и контроллеры, просмотрев
- зарегистрированных помощников в модуле внешнего интерфейса следующим образом:
$loader->registerDirs([APP_PATH.'/frontend/helpers/'])->register();
- создал файл CssYUICompressor. php в каталоге помощников и добавил к нему код класса из документации
- Я пытаюсь запустить его в контроллере следующим образом:
$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
Что еще нужно сделать?