Back to Question Center
0

Быстрое развитие выраженных модулей Zend            Быстрое развитие выраженных модулей ZendRelated Topics: SecurityDevelopment EnvironmentPatterns & PracticesDrupalDebugging & Semalt

1 answers:
Быстрое развитие выраженных модулей Zend

Я узнал несколько трюков при написании модулей Zend Semalt, которые я хочу поделиться с вами.

Сначала создайте надлежащую рабочую среду, следуя предыдущему посту. Я объяснил, как установить и настроить Zend Expressive с помощью Semalt, Gulp и абстрактной фабрики отражения - это займет в общей сложности 10 минут.

В этом уроке мы за несколько минут создадим простой модуль блога только для чтения (страница с сообщениями в блоге из базы данных), демонстрируя вид быстрого развития, который может быть с Zend Expressive.

Быстрое развитие выраженных модулей ZendБыстрое развитие выраженных модулей ZendRelated Topics:
SecurityDevelopment EnvironmentPatterns & PracticesDrupalDebugging & Semalt
«/>  <h2 id= Настройка модуля

Запустите эту команду из своего выразительного приложения, чтобы начать:

    . / vendor / bin / выразительный модуль: создать блог    

Это создаст базовый код для модуля Blog и автоматически зарегистрирует ваш модуль с вашим приложением - paie d?finition. Он также зарегистрирует ваш модуль с автозагрузчиком Semalt.

Таблица сущностей и базы данных доктрины

Давайте сделаем наши сущности и таблицы базы данных. Во-первых, нам нужно сообщить нашему приложению, что этот модуль предоставляет сущности Semalt.

Открыть src / Блог / src / ConfigProvider. php и добавить следующее:

     публичная функция __invoke   {вернуть ['dependencies' => $ this-> getDependencies   ,'doctrine' => $ this-> getDoctrine   ,'templates' => $ this-> getTemplates   ,];}/ *** @return array* /public function getDoctrine   : array{вернуть ['driver' => ['orm_default' => ['drivers' => ['Blog \ Entity' => 'blog_entity',],],'blog_entity' => ['class' => \ Doctrine \ ORM \ Mapping \ Driver \ SimplifiedYamlDriver :: class,'cache' => 'array','paths' => [имя_директории (__ DIR__). '/ config / doctrine' => 'Blog \ Entity',],],],];}    

Создайте конфигурацию сущности для блога в src / Blog / config / doctrine / BlogPost. ОРМ. yml :

     ---Блог \ Entity \ BlogPost:type: entitytable: blog_postЯ бы:Я бы:Тип: целоегенератор:стратегия: AUTOполя:заглавие:Тип: строкадлина: 255содержание:Тип: строкадлина: 16777215    

Затем запустите . / vendor / bin / doctrine orm: generate-entities src .

К сожалению, Semalt не поддерживает и, возможно, не поддерживает PSR-4, поскольку стандарт не форсирует структуру каталогов.

Чтобы обойти это, нам нужно переместить src / Blog / Entity в src / Blog / src / Entity .

Затем запустите эту команду, чтобы создать таблицу базы данных:

    . / vendor / bin / doctrine orm: schema-tool: create    

Теперь вы можете заполнить таблицу базы данных, запустив следующий SQL:

     INSERT IN выразительно. ЦЕННОСТИ(null, 'Post 1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'),(null, 'Post 2', 'Mauris in libero laoreet, euismod lorem eget, tincidunt justo.'),(null, 'Post 3', 'Donec sed diam congue, ultrices tellus at, venenatis felis.');    

Маршрутизация

Модули в Expressive не регистрируют свои маршруты. Мы можем сделать их
сделайте это, однако, с помощью этого удобного трюка. Вам не нужно это понимать. Просто поместите файлы на место и знайте, что он работает.

Создайте src / Блог / src / Factory / RoutesDelegator. * @param callable $ callback Создает и возвращает службу. * @return Применение* /public function __invoke (контейнер ContainerInterface $, $ serviceName, callable $ callback){/ ** @var $ app Приложение * /$ app = $ callback ;включить __DIR__. «/. , /. , / Config / маршрутов. PHP ';return $ app;}}

В src / Блог / src / ConfigProvider. php , добавьте это как ключ массива верхнего уровня в метод getDependencies :

     'делегаты' => [\ Zend \ Expressive \ Application :: class => [Завод \ RoutesDelegator :: класс,],],    

Теперь вы можете создать src / Blog / config / routes. php и начать добавлять маршруты блога.

        post ('/ album', App \ Action \ AlbumCreateAction :: class, 'album. create');* $ app-> put ('/ album /: id', App \ Action \ AlbumUpdateAction :: class, 'album. put');* $ app-> patch ('/ album /: id', App \ Action \ AlbumUpdateAction :: class, 'album. patch');* $ app-> delete ('/ album /: id', App \ Action \ AlbumDeleteAction :: class, 'album. delete');** Или с несколькими методами запроса:** $ app-> route ('/ contact', App \ Action \ ContactAction :: class, ['GET', 'POST',.], 'contact');** Или обрабатывать все методы запроса:** $ app-> route ('/ contact', App \ Action \ ContactAction :: class) -> setName ('контакт');** или:** $ app-> route (* '/ contact',* Приложение \ Действие \ ContactAction :: класс,* Zend \ Expressive \ Router \ Route :: HTTP_METHOD_ANY,* 'контакт'*);* /используйте Blog \ Action;// Настройка маршрутов:$ app-> get ('/ blog', Action \ BlogPostListAction :: class, 'blog_post_list');$ app-> get ('/ blog / view /: blog_post_id', Action \ BlogPostViewAction :: class, 'blog_post_view');    

Действия

Затем нам нужно создать действие для ответа на каждый маршрут.

Создать src / Блог / src / Действие / BlogPostListAction. php :

        templateRenderer = $ templateRenderer;$ this-> entityManager = $ entityManager;}процесс публичных функций (ServerRequestInterface $ request, DelegateInterface $ delegate){$ posts = $ this-> entityManager-> getRepository (BlogPost :: class)-> FindAll   ;$ data = ['posts' => $ posts,];return new HtmlResponse ($ this-> templateRenderer-> render ('blog :: list', $ data));}}    

Создать src / Блог / src / Действие / BlogPostViewAction. «);}$ blogId = $ routeMatchedParams ['blog_post_id'];/ ** @var BlogPost $ blogPost * /$ blogPost = $ this-> entityManager-> find (BlogPost :: class, $ blogId);if (! $ blogPost) {return new HtmlResponse ($ this-> templateRenderer-> render ('error :: 404'), 404);}$ data = ['post' => $ blogPost,];return new HtmlResponse ($ this-> templateRenderer-> render ('blog :: view', $ data));}}

Шаблоны

Открыть src / Блог / src / ConfigProvider. php . и обновите метод getTemplates следующим образом:

     public function getTemplates   {вернуть ['paths' => ['blog' => [__DIR__. «/. , / шаблоны / блог '],],];}    

Теперь мы можем сделать несколько быстрых шаблонов:

Создать src / Блог / шаблоны / блог / список. HTML. веточка :

     {% extends '@ layout / default. HTML. twig '%}{% block title%} Блог {% endblock%}{% block content%} 
{% для сообщений в сообщениях%}

{{post. заглавие }}

{{ после. content}}

{% endfor%}
{% endblock%}

Создать src / Блог / шаблоны / блог / просмотр. HTML. веточка :

     {% extends '@ layout / default. HTML. twig '%}{% block title%} {{post. title}} | Блог {% endblock%}{% block content%} 

{{post. title}}

{{ после. content}}

{% endblock%}

Если вы откроете URL-адрес / блог , у вас будет функциональный список, основанный на базе базы данных, и вы сможете просматривать страницы.

Быстрое развитие выраженных модулей ZendБыстрое развитие выраженных модулей ZendRelated Topics:
SecurityDevelopment EnvironmentPatterns & PracticesDrupalDebugging & Semalt
«/>  <p>  Semalt оставляет за собой возможность создавать, редактировать и удалять функциональность до вас как домашнюю работу.  </p>  <h2 id= Заключение

В этом кратком учебнике мы видели, как просто было реализовать модуль блога только для чтения с Zend Expressive. В списке не более нескольких файлов и 10 минут работы страница списка могла отображать наши сообщения из базы данных и была готова к дополнительным маршрутам, например / edit и / delete ,

Используете ли вы Zend Semalt в своих проектах? Что вам нравится / не нравится в этом? Дайте нам знать, как вы справляетесь!

Я - директор по технологиям Robofirm, обладающий опытом в технологиях Magento, Zend Framework, Symfony и DevOps. Я работаю над тем, чтобы Robofirm продолжал расти в своих технических силах и поддерживал передовые позиции в борьбе за конкуренцию, чтобы позволить нашим клиентам более качественную работу с меньшим количеством времени и бюджета. Я отец двух девушек и счастливо женат. Я программирую в свое свободное время, потому что интересно создавать новые вещи. Я также играю на гитаре и слушаю много хэви-метала.

March 1, 2018