Back to Question Center
0

توسعه سریع ماژول های افسانه ای Zend            توسعه سریع از ماژول های افسانه ای Zend موضوع های مرتبط: محیط زیست SecurityDetvelops & ؛ PracticesDrupalDebugging & ؛ Semalt

1 answers:
توسعه سریع ماژول های افسانه ای Zend

چند نکته را یاد می گیرم هنگام نوشتن ماژول های Zend Semalt که می خواهم با شما به اشتراک بگذارم.

برای اولین بار برای ایجاد یک محیط کار مناسب، لطفا برای اولین بار به دنبال پست قبلی باشید. من توضیح دادم که چگونه Zend Expressive را با Semalt، Gulp و یک کارخانه بازتاب انتزاعی نصب و پیکربندی کنید - این کار 10 دقیقه طول می کشد.

در این آموزش، یک ماژول وبلاگ ساده فقط خواندنی (یک صفحه فهرست پستهای وبلاگ از یک پایگاه داده) را در عرض چند دقیقه ایجاد میکنیم، که نشان میدهد نوع پیشرفت سریع که Zend Expressive قادر است - grand prive no deposit bonus codes.

توسعه سریع ماژول های افسانه ای Zendتوسعه سریع از ماژول های افسانه ای Zend موضوع های مرتبط:
محیط زیست امنیت و محیط زیستPatterns & PracticesDrupalDebugging و Semalt

راه اندازی ماژول

اجرای این دستور را از برنامه بیانگر خود برای شروع کنید:

    . / فروشنده / بن / بیان ماژول: ایجاد وبلاگ    

این یک کد پایه برای یک ماژول وبلاگ تولید می کند و ماژول شما را به صورت خودکار با برنامه شما ثبت می کند. همچنین ماژول شما را با Autoloader Semalt ثبت می کند.

جدول دیتابیس و پایگاه داده

بیایید ساختار وبلاگ ما و جداول پایگاه داده را ایجاد کنیم. اولا ما باید اجازه دهیم برنامه ما بداند که این ماژول، نهادهای Semalt را فراهم می کند.

باز src / وبلاگ / src / ConfigProvider. php و اضافه کردن موارد زیر:

     عملکرد عمومی __invoke   {برگشت ['dependencies' => $ this-> getDependencies   ،'doctrine' => $ this-> getDoctrine   ،'templates' => $ this-> getTemplates   ،]}/ ***return array* /تابع عمومی getDoctrine   : آرایه{برگشت ['driver' => ['orm_default' => ['drivers' => ['Blog \ Entity' => 'blog_entity']،]،'blog_entity' => ['class' => \ Doctrine \ ORM \ Mapping \ Driver \ SimplifiedYamlDriver :: class،'cache' => 'array''مسیرها' => [dirname (__ DIR__) '/ config / doctrine' => 'وبلاگ \ انتیتی'،]،]،]،]}    

پیکربندی یک نهاد بلاگ را در src / Blog / config / doctrine / BlogPost ایجاد کنید. اورم yml :

     ---Blog \ Entity \ BlogPost:نوع: نهادجدول: blog_postشناسه:شناسه:نوع: عدد صحیحژنراتور:استراتژی: AUTOزمینه های:عنوان:نوع: رشتهطول: 255محتوا:نوع: رشتهطول: 16777215    

سپس، اجرا . / vendor / bin / doctrine orm: generate-entities src .

متاسفانه، Semalt نمی کند و احتمالا از PSR-4 پشتیبانی نمی کند زیرا استاندارد یک ساختار دایرکتوری را مجبور نمی کند.

برای جلوگیری از این، ما باید حرکت کنیم src / Blog / Entity to src / Blog / src / Entity .

سپس این دستور را اجرا کنید تا جدول پایگاه داده خود را ایجاد کنید:

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

حالا شما می توانید جدول پایگاه داده را با اجرای زیر SQL اجرا کنید:

     INSERT IN EXPRESSIVE. ارزش وبلاگ_پست(null، 'Post 1'، 'Lorem ipsum dolor sit amet، consectetur adipiscing elit.')(خالی، 'پست 2'، 'Mauris در libero laoreet، euismod lorem eget، tincidunt justo.')(null، 'Post 3'، 'Donec sed diam congue، ultrice tellus در، venenatis felis')؛    

مسیریابی

ماژول ها در Expressive مسیرهای خود را ثبت نمی کنند. ما می توانیم آنها را
این کار را با این ترفند مفید انجام دهید. شما لازم نیست که آن را درک کنید. فقط فایل ها را در محل قرار دهید و بدانید که کار می کند.

یک src / Blog / src / Factory / RoutesDelegator ایجاد کنید. *param callback $ callback سرویس را ایجاد و بازگشت می دهد. *return application* /تابع عمومی __invoke (ContainerInterface $ container، $ serviceName، Callback $ callback){/ ** برنامه کاربردیvar $ app * /$ app = $ callback ؛شامل __DIR__ است '/. / . / پیکربندی / مسیرها. php '؛بازگشت $ برنامه؛}}

در src / وبلاگ / src / ConfigProvider. php ، این را به عنوان کلید آرایه سطح بالا به روش getDependencies اضافه کنید:

     'نمایندگان' => [\ Zend \ Expressive \ Application :: class => [کارخانه \ RoutesDelegator :: کلاس]،]،    

حالا شما می توانید src / Blog / config / routes ایجاد کنید. php فایل و شروع به اضافه کردن مسیرهای وبلاگ.

      <؟ php/ *** مسیرهای راه اندازی با یک روش تک درخواست:*var \ Zend \ Expressive \ Application $ app** $ app->  post ('/ album'، App \ Action \ AlbumCreateAction :: class، 'آلبوم ایجاد')؛* $ app-> put ('/ album /: id'، App \ Action \ AlbumUpdateAction :: class، 'album put')؛* $ app-> patch ('/ album /: id'، App \ Action \ AlbumUpdateAction :: class، 'آلبوم پچ')؛* $ 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 ('contact')؛** یا:** $ app-> route (*'/تماس'،* برنامه \ Action \ ContactAction :: کلاس* Zend \ Expressive \ Router \ Route :: HTTP_METHOD_ANY،*'تماس'*)* /از Blog \ Action استفاده کنید// مسیرهای راه اندازی:$ app-> دریافت ('/ وبلاگ'، Action \ BlogPostListAction :: class، 'blog_post_list')؛$ app-> get ('/ blog / view /: blog_post_id'، Action \ BlogPostViewAction :: class، 'blog_post_view')؛    

اقدامات

سپس، ما باید یک اقدام برای پاسخ به هر مسیر ایجاد کنیم.

ایجاد src / Blog / src / Action / BlogPostListAction. php :

      <؟ phpفضای نام وبلاگ \ Action؛از Blog \ Entity \ BlogPost استفاده کنیداستفاده از Doctrine / ORM \ EntityManager؛استفاده از Interop \ Http \ ServerMiddleware \ DelegateInterface؛استفاده از Interop \ Http \ ServerMiddleware \ MiddlewareInterface به عنوان ServerMiddlewareInterface؛استفاده از Psr \ Http \ Message \ ServerRequestInterface؛از Zend \ Diactoros \ Response \ HtmlResponse استفاده کنیداستفاده از Zend \ Expressive \ Router؛استفاده از Zend \ Expressive \ Template؛کلاس BlogPostListAction پیاده سازی ServerMiddlewareInterface{/ ***var template \ TemplateRendererInterface* /خصوصی $ templateRenderer؛/ ***var EntityManager* /خصوصی $ entityManager؛تابع عمومی __construct (EntityManager $ entityManagerالگو \ TemplateRendererInterface $ templateRenderer = null) {$ this->  templateRenderer = $ templateRenderer؛$ this-> entityManager = $ entityManager؛}روند تابع عمومی (Request ServerRequestInterface $، DelegateInterface $ delegate){$ posts = $ this-> entityManager-> getRepository (BlogPost :: class)-> findAll   ؛$ data = ['posts' => $ posts]بازگشت 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)؛اگر (! $ blogPost) {بازگشت HtmlResponse جدید ($ this-> templateRenderer-> render ('error: 404')، 404)؛}$ data = ['post' => $ blogPost]بازگشت HtmlResponse جدید ($ this-> templateRenderer-> render ('blog :: view'، $ data))؛}}

الگوها

باز src / وبلاگ / src / ConfigProvider. php . و روش getTemplates را به این مورد بروز کنید:

     تابع عمومی getTemplates   {برگشت ['مسیرها' => ['وبلاگ' => [__DIR__. '/. / قالب / وبلاگ ']،]،]}    

حالا ما می توانیم برخی از الگوهای سریع را ایجاد کنیم:

ایجاد src / وبلاگ / قالب / وبلاگ / لیست. html شاخه :

     {٪ گسترش '@ طرح بندی / پیش فرض. html twig٪٪}{٪ block title٪} وبلاگ {٪ endblock٪}{٪ محتوای بلوک٪} 
{٪ برای پست در پستها٪}

{{post. عنوان }}

{{ پست. محتوا }}

{٪ endfor٪}
{٪ endblock٪}

ایجاد src / وبلاگ / قالب / وبلاگ / نمایش. html شاخه :

     {٪ گسترش '@ طرح بندی / پیش فرض. html twig٪٪}{٪ title block٪} {{post. عنوان}} | وبلاگ {٪ endblock٪}{٪ محتوای بلوک٪} 

{{پست. عنوان}}

{{ پست. محتوا }}

{٪ endblock٪}

اگر URL / وبلاگ را باز کنید، شما یک لیست وبلاگ فعال و کارآمد را در اختیار دارید و می توانید صفحات را مشاهده کنید.

توسعه سریع ماژول های افسانه ای Zendتوسعه سریع از ماژول های افسانه ای Zend موضوع های مرتبط:
محیط زیست امنیت و محیط زیستPatterns & PracticesDrupalDebugging و Semalt

Semalt اجرای ایجاد، ویرایش و حذف عملکرد به عنوان تکلیف را ترک کنید.

نتیجه گیری

در این آموزش کوتاه، متوجه شدیم که ساده سازی این بود که ماژول وبلاگ را فقط با خواندن Zend Expressive اجرا کنیم. در لیست بیش از چند فایل و 10 دقیقه کار، صفحه لیست می تواند پست های ما را از پایگاه داده نمایش دهد و برای مسیرهای اضافی مانند / ویرایش و / حذف .

آیا از Zend Semalt در پروژه های خود استفاده می کنید؟ چه چیزی در مورد آن دوست دارید / دوست نداشتید؟ به ما بفهمانید که چطور دریافت میکنید!

February 28, 2018