Архив рубрики: WEB

Создание помошника (View Helper) для Zend Framework 3

Задача: естественным для Zend Framework способом выводить в шаблоне phtml некий HTML текст генерируемый на сервере.

Решение: создадим helper (помошник вида), на примере вывода каких то сообщений пользователю.

1) В настройках модуля анонсируем помошника:

            'view_helpers' => [                    
                    'factories' => [View\Helper\Messages::class => InvokableFactory::class],                   
                    'aliases' => ['mess' => View\Helper\Messages::class],                                
                ],

2) Создаем класс /module/Application/src/View/Helper/Messages

<?php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
use Application\Common\CommonFunctions;
// Этот класс помощника отображения разных сообщений пользователю (статичных)
class Messages extends AbstractHelper {  
public function __construct() {    
}    
public function renderErrorMessages() {    
    foreach (CommonFunctions::$err as $msg) {
        echo '<div class="alert alert-warning alert-dismissible fade show" role="alert">';
        echo "<strong>$msg</strong>";
        echo '<button type="button" class="close" data-dismiss="alert" aria-label="Close">';
        echo '<span aria-hidden="true">×</span>';
        echo '</button>';
        echo '</div>';
    };
}
    
}

3) В нутри шаблона layout.phtml теперь можно написать чтото вроде:

        <div class="container-fluid">
            <?php echo $this->mess()->renderErrorMessages(); ?>
            <?= $this->content ?>
            <hr>
            <footer>
                <p>© 2011 - <?= date('Y') ?> by <a href="https://грибовы.рф">Pavel Gribov</a></p>
            </footer>
        </div>

Zend Framework 3 получение конфигурации приложения из контроллера

Казалось бы простая вещь, а телодвижений много. Странно. Но тем не менее, решение есть.

Конфигурация приложения:

<?php
return [
    'database'=>[
                        'host'  => '127.0.0.1',
                        'username'=>'root',
                        'password'=>'perferfre',
                        'basename'=>'mysql'        
    ],
    'modules' => [
            'Zend\Router',
            'Zend\Validator',
            'Application',            
    ],
    'module_listener_options' => [
        'module_paths' => [
            './module',
            './vendor',
        ],
        'config_cache_enabled' => false,
        'config_cache_key' => 'application.config.cache',
        'module_map_cache_enabled' => false,
        'module_map_cache_key' => 'application.module.cache',
        'cache_dir' => 'data/cache/',
    ],    
];

Создаем  фабрику IndexControllerFactory.php:

namespace Application\Controller;

use Zend\ServiceManager\Factory\FactoryInterface;
use Interop\Container\ContainerInterface;

class IndexControllerFactory implements FactoryInterface{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null){
        $config = $container->get("ApplicationConfig");
        return new IndexController($config);
    }
}

В конфигурации модуля:

            'controllers' => [
                'factories' => [
                    Controller\IndexController::class => Controller\IndexControllerFactory::class,                        
                    Controller\UserController::class => InvokableFactory::class,                        
                ],
            ],

В контроллере:

class IndexController extends AbstractActionController{        
    var $sqln; 
    public function __construct(array $config) {     
        var_dump($config);
	 }    
...

 

Минимальный скелет приложения для Zend Framework 3

Решил попробовать не собирать каждый раз при старте нового проекта свой «каркас» приложения, а взять  уже готовый фреймворк в стиле MVC и попробовать использовать его. Пока выбор пал на Zend Framework, потому что там похоже действительно самый минимум. Он не «раздутый», который для использования не требует недель изучения для «старта» (типа YII).  С фреймворком,в базе для первоначального обучения идет «штатный минимальный шаблон»  : https://github.com/zendframework/ZendSkeletonApplication, но мне он  тоже показался слишком усложненным. Потому в ходе «упрощения» создал свой:

https://github.com/donpadlo/zend3skeleton

, который при помощи composer позволяет установить фреймворк, и позволяет поддерживать актуальными дополнительные компоненты типа jquery, bootstrap4 и т.д.

Кроме того, из штатного «скелета» вырезан лишний код, который усложняет первоначальное понимание принципов работы Zend Framework

В шаблоне так-же рассмотрен вариант использования двух контроллеров, а не одного как в «базе» (в реальных проектах число контроллеров стремится к увеличению)

 

Использование Composer в проектах на PHP

Composer — это менеджер внешних библиотек для вашего проекта. Например, если вы используете jquery, jqueryui, какие-то другие библиотеки, то для того чтобы не тащить их при переносе проекта, не следить за их обновлением и актуальностью, достаточно использовать Composer. При новой инсталляции проекта достаточно будет выполнить

composer install

для генерации начального composer.json  (создание нового проекта) достаточно выполнить:

composer init

добавить нужные пакеты в папку vendor можно:

composer require components/jquery:3.3.1
composer require components/jqueryui:1.12.1
composer require components/font-awesome:5.4.2
composer require components/bootstrap:4.1.1

Обновить пакеты можно:

composer update

Ну и далее как использовать в своем коде PHP:

require_once vendor/autoload.php
 
Или JS:
 
<script src="/vendor/components/jquery/jquery.js"></script>

Ну и в догонку. Если у вас из проекта нет доступа к папке vendor, а нужно для использования например css и js непосредственно на странице, можно сделать симлинк, например что-то вроде:

pavel@pavelpc:/var/www/webuseorg4/public$ ln -s ../vendor/components/ components
pavel@pavelpc:/var/www/webuseorg4/public$