Evolution CMS Урок 1: Настройка окружения для работы

composer create-project evolutioncms/evolution:2.0.x-dev .

php install/cli-install.php --database_server=localhost --database=DB --database_user=USER --database_password=PASS --table_prefix=evo_ --cmsadmin=admin --cmsadminemail=email@gmail.com --cmspassword=123456 --language=en --mode=new --installData=n --removeInstall=y

3 комментария

avatar
Подскажите, пожалуйста, как зарегать свою директиву (как фильтр в Twig)?
Здесь core\src\Support\BladeDirective.php прописал. Но вызов в Blade не компилируется. Так понимаю, нужно кеш view сбросить?
avatar
Давайте начнем с того, что единственное место в папке core где вы можете вносить свои правки — папка custom. Но прежде чем пояснять как сделать, я объясню как это работает в ядре.

Есть файл core/config/view.php в котором определен ключ массива directive. Там перечислен список директив добавляемые в blade.

[
        'evoParser' => [EvolutionCMS\Support\BladeDirective::class, 'evoParser'],
        'evoLang' => [EvolutionCMS\Support\BladeDirective::class, 'evoLang'],
        'evoStyle' => [EvolutionCMS\Support\BladeDirective::class, 'evoStyle'],
        'evoAdminLang' => [EvolutionCMS\Support\BladeDirective::class, 'evoAdminLang'],
        'evoCharset' => [EvolutionCMS\Support\BladeDirective::class, 'evoCharset'],
        'evoAdminThemeUrl' => [EvolutionCMS\Support\BladeDirective::class, 'evoAdminThemeUrl'],
        'evoAdminThemeName' => [EvolutionCMS\Support\BladeDirective::class, 'evoAdminThemeName'],
        'makeUrl' => [EvolutionCMS\Support\BladeDirective::class, 'makeUrl'],

    ]

Т.е. за директиву makeUrl отвечает метод makeUrl из класса EvolutionCMS\Support\BladeDirective.

Таким образом, чтобы добавить совою директиву — необходимо зарезервировать для нее имя и подготовить код который будет заниматься преобразованием blade стиля в нативный php. Ну для примера, это будет exampleDirective. Чтобы добавить новую или изменить директиву в конфиге, нам не нужно править файл core/config/view.php (поскольку в версии 2.0.1 могут добавиться новые директивы и как вы будете потом обновлять движок со всеми этими конфликтами?). По эмы создаем файлик core/custom/config/view/directive/exampleDirective.php с содержанием вида
return [YouClass::class, 'youMethod'];
. Где YouClass это имя вашего класса, а youMethod как уже догадались — сам метод отвечающий за преобразование blade в нативный php.

Где и как правильно создать класс YouClass, чтобы он попал в автозагрузку это отдельная история. Поэтому рассмотрим варианты проще
Анонимный класс
<?php return [new class() { public function youMethod(){return '<?php phpinfo();?>';}}, 'youMethod'];

Анонимная функция
<?php return function() {
    return '<?php phpinfo();?>';
};


Именно так вы должны добавлять директиву
@exampleDirective
avatar
Спасибо за развернутый ответ! Этого более чем достаточно.
Пока осваиваюсь ограничился функцией
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.