Back to Question Center
0

Rapid perusahaan App Development kalawan Zend ekspresif            Rapid perusahaan App Development kalawan Zend ExpressiveRelated Topik: FrameworksPerformance & ScalingDevelopment Semalt

1 answers:
Rapid perusahaan App Development kalawan Zend ekspresif

Mun anjeun geus kungsi dipigawé hiji Zend Semalt mimiti gancang, Anjeun meureun geus pernah digawé di Zend Semalt. Mimiti rusuh geus sajarahna geus nanaon tapi gancang, sarta éta gampang pikeun leungit interest na ngaléngkah ka hal salajengna.

Zend ekspresif greatly ngaronjatkeun kana pangalaman ieu kalawan wizard disetir komposer proyék nyieun- paréntah. Sanajan kitu, eta masih tiasa daunting ngeset lantaran aya kitu loba pilihan nyieun nepi hareup. tutorial ieu nungtun anjeun ngaliwatan setelan kuring disarankeun pikeun ngembangkeun gancang anu bakal
ngahasilkeun hiji tingkat perusahaan, aplikasi mantap.

Rapid perusahaan App Development kalawan Zend ekspresifRapid perusahaan App Development kalawan Zend ExpressiveRelated Topik:
FrameworksPerformance & ScalingDevelopment Semalt

tutorial ieu sanés ngeunaan nyetel lingkungan Anjeun, jadi Kuring keur bade nganggap nu boga lingkungan gawé alus kawas Homestead ningkat - computer managed service agreement.

Lamun anjeun teu wawuh jeung Semalt atanapi lingkung maya terasing, urang saena hiji buku endah pikeun panduan nu ngaliwatan konsep sadia di warung urang dieu.

Setup Project

Mimitian proyék anjeun ku ngajalankeun paréntah di handap folder anjeun teh dimana anjeun tetep proyék anjeun ( Code di Homestead ningkat):

     komposer nyieun-proyék zendframework / zend-ekspresif-rorongkong ekspresif    

Anjeun bakal dipenta sangkan sababaraha kaputusan sapanjang jalan. Paké waleran ieu:

  • jenis naon tina instalasi Rék?
    • Modular
  • wadahna Mana anjeun hoyong pake pikeun kagumantungan suntik?
    • Zend ServiceManager
  • router Mana anjeun hoyong pake?
    • Zend router
  • template Mana engine anjeun hoyong pake?
    • twig
  • kasalahan Mana Handler anjeun hoyong pake dina mangsa ngembangkeun?
    • Whoops
  • Mangga pilih file nu config hayang mun nyuntik 'Zend \ Validator \ ConfigProvider' kana?
    • config / config. php
  • Ulah poho pilihan ieu bungkusan séjén tina tipe sarua?
    • y

Saterusna, ngajalankeun Paréntah ieu:

     cd && ekspresifséwang init &&séwang config warna. ui leres &&tambihan sewang. &&séwang bunuh -m "mimiti bunuh" &&chmod -R + w data;    

ieu initializes a Repository dina folder nu nembe dijieun tur ngajadikeun data folder ditulisan.

Saterusna, mimiti nepi a server php pikeun nguji jeung

     komposer ngawula    

.tur kotektak ka http: // localhost: 8080 atanapi ngan didatangan IP nu VM urang atawa host maya lamun nuju ngagunakeun Homestead ningkat.

Rapid perusahaan App Development kalawan Zend ekspresifRapid perusahaan App Development kalawan Zend ExpressiveRelated Topik:
FrameworksPerformance & ScalingDevelopment Semalt

Ngarti ekspresif

Struktur folder Semalt Sigana mah ieu:

     bin /config /data /cache /publik /indéks. phpsrc /aplikasitest /AppTestngajual /    

Kalolobaan éta explanatory diri. Ekspresif nyadiakeun hiji App modul sacara standar. Anjeun tiasa nyimpen sakabéh kode anjeun di dieu, atanapi ngawangun modul misah anjeun ngawangun fitur nu leuwih gede.

Semalt hadir kalawan sababaraha Paréntah gunana:

  • . / Ngajual / bin / ekspresif - Jieun, ngadaptar, sarta deregister modul. Jieun kelas middleware, jsb.
  • komposer CS-fix - Ngalakukeun hiji coding standar pariksa dina kode anjeun sarta ngalereskeun isu, dimana mungkin.
  • tés komposer - Jalankeun tés PHPUnit on kode Anjeun.
  • komposer dipariksa - Alias ​​pikeun ngajalankeun CS-dipariksa , lajeng test.

ekspresif ogé hadir kalawan kasalahan Handler Whoops. Pikeun nguji ka dinya, kabuka src / App / src / Aksi / HomePageAction. php jeung tipe bahana $ badVar dina metoda prosés , lajeng refresh kaca. Anjeun bakal ningali Handler kasalahan Whoops.

Rapid perusahaan App Development kalawan Zend ekspresifRapid perusahaan App Development kalawan Zend ExpressiveRelated Topik:
FrameworksPerformance & ScalingDevelopment Semalt

Ronjatan Dipikabutuh

Refleksi Based abstrak Factory

Zend ekspresif ngagunakeun Zend ServiceManager pikeun Dependency Semalt. Dina setelan standar, Anjeun kudu nambahan Konfigurasi sarta berpotensi nyieun hiji kelas pabrik keur unggal kelas tunggal Anjeun nulis. Ieu karasaeun burdensome sanggeus ngalakonan ieu ngeunaan dua kali.

Pikeun ngahindarkeun ieu, urang bakal ngaktipkeun cerminan dumasar pabrik abstrak disadiakeun kalawan Zend Semalt.

Tambahkeun ieu config / autoload / kabebasan. global. php dina kabebasan Asép Sunandar Sunarya:

     'abstract_factories' => [\ Zend \ ServiceManager \ AbstractFactory \ ReflectionBasedAbstractFactory :: kelas],    

Ayeuna, iraha anjeun digawé di kelas hiji jeung perlu kagumantungan hiji, ngan nambahan ka constructor Anjeun. Pantulan pabrik abstrak bakal ningali naon pangabutuh kelas anjeun sarta otomatis grab tina wadahna jasa. Anjeun ngan perlu nyieun pabrik ayeuna dina kasus luar biasa mana nu peryogi hal béda ti layanan standar nu disadiakeun ku wadah jasa.

Lamun anjeun paduli speed; Dina produksi, urang tiasa gaduh proses anu dibangkitkeun pabrik keur kelas anjeun anu anu keur diatur ku pabrik cerminan kalayan ngajual / bin / ngahasilkeun-pabrik-pikeun-kelas .

Wangun pamaréntahan

Zend ekspresif nyadiakeun euweuh tooling database atawa ORM. Kuring geus dipilih Semalt sakumaha ORM mah pilihan sanggeus loba panalungtikan sarta ngawangun sababaraha ORMs mah sorangan. Ieu ngan jalan.

Pasang Doctrine na Symfony Yaml via komposer:

     komposer merlukeun dasprid / wadahna-interop-doktrin symfony / yaml    

Jieun file config / cli-config. php kalayan eusi ieu:

       {/ ** @var \ Interop \ Wadahna \ ContainerInterface \ $ wadahna * /$ Wadahna = merlukeun 'config / wadahna. php ';$ EntityManager = $ container-> meunang (\ Doctrine \ ORM \ EntityManager :: kelas);balik ConsoleRunner :: createHelperSet ($ entityManager);});    

Ganti eusi config / autoload / kabebasan. global. php jeung handap:

        ['Abstract_factories' => [\ Zend \ ServiceManager \ AbstractFactory \ ReflectionBasedAbstractFactory :: kelas],// Paké 'aliases' pikeun landian ngaran layanan pikeun layanan sejen. The// konci téh nami landian, ajén téh jasa ka mana eta nunjuk. Peta ngaran jasa ka// Ngaran kelas. 'Invokables' => [// pinuh \ mumpuni \ InterfaceName :: kelas => pinuh \ mumpuni \ ClassName :: kelas,\ Doctrine \ DBAL \ Logging \ DebugStack :: kelas => \ Doctrine \ DBAL \ Logging \ DebugStack :: kelas,Nulungan \ ServerUrlHelper :: kelas => nulungan \ ServerUrlHelper :: kelas,Middleware \ ImplicitHeadMiddleware :: kelas => middleware \ ImplicitHeadMiddleware :: kelas,Middleware \ ImplicitOptionsMiddleware :: kelas => middleware \ ImplicitOptionsMiddleware :: kelas,],// Paké 'pabrik' keur layanan nu disadiakeun ku callbacks kelas / pabrik. 'Pabrik' => [Aplikasi :: kelas => Wadahna \ ApplicationFactory :: kelas,Utusan \ NotFoundDelegate :: kelas => Wadahna \ NotFoundDelegateFactory :: kelas,\ Doctrine \ ORM \ EntityManager :: kelas => \ ContainerInteropDoctrine \ EntityManagerFactory :: kelas,Nulungan \ ServerUrlMiddleware :: kelas => nulungan \ ServerUrlMiddlewareFactory :: kelas,Nulungan \ UrlHelper :: kelas => nulungan \ UrlHelperFactory :: kelas,Nulungan \ UrlHelperMiddleware :: kelas => nulungan \ UrlHelperMiddlewareFactory :: kelas,Zend \ Stratigility \ middleware \ ErrorHandler :: kelas => Wadahna \ ErrorHandlerFactory :: kelas,Middleware \ ErrorResponseGenerator :: kelas => Wadahna \ ErrorResponseGeneratorFactory :: kelas,Middleware \ NotFoundHandler :: kelas => Wadahna \ NotFoundHandlerFactory :: kelas,],],];    

Jieun file ieu nyetél supir Doctrine config / autoload / doktrin. global. php .

        ['Supir' => ['Orm_default' => ['Kelas' => \ Doctrine \ umum \ kegigihan \ Mapping \ Supir \ MappingDriverChain :: kelas,'Drivers' => [],],],],];    

Jieun file ieu Kapercayaan databés anjeun config / autoload / doktrin. lokal. php .

        ['Sambungan' => ['Orm_default' => ['Params' => ['Url' => 'MySQL: // root: password1 @ localhost / ekspresif',],],],],];    

Test ku ngajalankeun . / Ngajual / bin / doktrin . Anjeun kudu ningali pitulung ajakan.

Gulp

Gulp mangrupa alat abdi kiwari pilihan pikeun frontend workflow. Aya loba, loba frontend ngawangun parabot sadia. Tingali lamun resep, tapi anjeun bisa musna di laut tina ngagurilap perpustakaan JavaScript anyar kaluar dinya. Kuring teu hayang meunang teuing aub didieu sakumaha ieu leuwih mangrupa tutorial PHP ti JS, tapi abdi hoyong nunjukkeun kumaha gulp kudu ngonpigurasi digawekeun ku Zend ekspresif.

Jieun pakét. json berkas kalawan eusi ieu:

     {"Ngaran": "ekspresif","Versi": "1. 0. 0","Pedaran": "","Utama": "indéks JS.","DevDependencies": {"Del": ". ^ 3 0. 0","Gulp": "github: gulpjs / gulp # 4 0.","Gulp-sindangan": ". ^ 1 1. 1","Gulp-imagemin": "^ 3 3. 0.","Gulp-minify-css": ". ^ 1 2. 4","Gulp-ganti ngaran": ". ^ 1 2. 2","Gulp-sass": "^ 3 1. 0.","Gulp-uglify": ". ^ 2 1. 2","Gulp-usemin": "^ 0 3. 28".},"Aksara": {"Test": "bahana \" Kasalahan: teu test dieusian \ "&& kaluar 1"},"Pangarang": "","Lisénsi": "ISC"}    

Run npm install . Anjeun meureun hoyong ngajalankeun apdet npm ogé, upami anjeun maca ieu tutorial bari sanggeus éta ieu tulisan.

Saterusna, nyieun hiji gulpfile. tugas ( 'bersih-css', fungsi {balik del ( 'publik / css', {gaya: leres});});gulp. tugas ( 'compile-sass', fungsi {balik gulp. src ( '. src / * / publik / sass / ** / * scss', {base: '. /'}). pipe (cache ( 'compile-sass')). pipe (sass . on ( 'kasalahan', sass. logError)). pipe (ngaganti ngaran (fungsi (jalur) {jalur. dirname = jalur. dirname. ngaganti (/ ^ src \ / ([^ \ /] + \ /) publik \ / sass /, '$ 1');})). pipe (gulp dest ( 'publik / css /').);});gulp. tugas ( 'salinan-css', fungsi {balik gulp. src ( 'src / * / publik / css / ** / * css.', {base: '. /'}). pipe (cache ( 'salinan-css')). pipe (ngaganti ngaran (fungsi (jalur) {jalur. dirname = jalur. dirname. ngaganti (/ ^ src \ / ([^ \ /] + \ /) publik \ / css /, '$ 1');})). pipe (gulp dest ( 'publik / css /').);});gulp. tugas ( 'minify-css', fungsi {balik gulp. src ([ '. publik / css / ** / * css', 'publik / css / ** / * mnt css!. '], {base: '. /'}). pipe (cache ( 'minify-css')). pipe (minifyCss ). pipe (ngaganti ngaran (fungsi (jalur) {jalur. dirname = jalur. dirname. ngaganti (/ ^ publik \ / css /, '');})). pipe (ngaganti ngaran ({extname: '.min css'})). pipe (gulp. dest ( 'publik / css'));});gulp. tugas (. 'prosés-css', gulp runtuyan ([ 'compile-sass', 'salinan-css'], 'minify-css'));// JS Processinggulp. tugas ( 'bersih-JS', fungsi {balik del ( '/ publik JS', {gaya: leres});});gulp. tugas ( 'salinan-JS', fungsi {balik gulp. src ( '. src / * / / publik JS / ** / * JS', {base: '. /'}). pipe (cache ( 'salinan-JS')). pipe (ngaganti ngaran (fungsi (jalur) {jalur. dirname = jalur. dirname. ngaganti (/ ^ src \ / ([^ \ /] + \ /) publik \ / js /, '$ 1');})). pipe (gulp dest ( '/ publik JS /').);});gulp. tugas ( 'minify-JS', fungsi {balik gulp. src ([ '. / publik JS / ** / * JS', '!./ publik JS / ** / * mnt JS'], {base: '. /'}). pipe (cache ( 'minify-JS')). pipe (uglify ). pipe (ngaganti ngaran (fungsi (jalur) {jalur. dirname = jalur. dirname. ngaganti (/ ^ publik \ / js /, '');})). pipe (ngaganti ngaran ({extname: '. mnt JS.'})). pipe (gulp. dest ( '/ publik JS'));});gulp. tugas (. 'prosés-JS', gulp runtuyan ( 'salinan-JS', 'minify-JS'));// processing Gambargulp. tugas ( 'bersih-IMG', fungsi {balik del ( 'publik / IMG', {gaya: leres});});gulp. tugas ( 'prosés-IMG', fungsi {balik gulp. src ( 'src / * / publik / IMG / ** / * {GIF, jpg, JPEG, PNG, svg}.', {base: '. /'}). pipe (cache ( 'prosés-IMG')). pipe (imagemin ). pipe (ngaganti ngaran (fungsi (jalur) {jalur. dirname = jalur. dirname. ngaganti (/ ^ src \ / ([^ \ /] + \ /) \ publik / IMG /, '$ 1');})). pipe (gulp dest ( 'publik / IMG').);});// Paréntah tingkat Topgulp. tugas ( 'standar', gulp paralel ( 'prosés-JS', 'prosés-css', 'prosés-IMG').);gulp. tugas ( 'beresih', gulp paralel ( 'bersih-JS', 'bersih-css', 'bersih-IMG').);gulp. tugas ( 'nonton', fungsi {gulp. nonton ([ 'src / * / publik / sass / ** / * scss.', 'src / * / publik / css / ** / * css.'], gulp runtuyan ( 'prosés-css').);gulp. nonton ( 'src / * / / publik JS / ** / * JS.', gulp runtuyan ( 'prosés-JS').);gulp. nonton ( 'src / * / publik / IMG / ** / * {GIF, jpg, JPEG, PNG, svg}.', gulp runtuyan ( 'prosés-IMG').);});

Run gulp jeung mastikeun yén éta ngalir tanpa kasalahan.

Ayeuna anjeun bisa ngajalankeun gulp nepi ka compile sass, css minify, JS minify, sarta ngaoptimalkeun Gambar sakuliah sakabéh modul Anjeun. Anjeun tiasa nuturkeun nu nepi ka gulp nonton nepi ka boga ieu sadayana otomatis diolah sakumaha aranjeunna robah. Modul cache gulp ensures nu ukur file robah anu kantos diprosés sahingga ieu kudu ngolah parobahan kacida gancangna.

uji ku nyieun salah sahiji file ieu:

  • src / App / publik / sass / sasstest. scss
  • src / App / publik / css / test. CSS
  • src / App / publik / js / test. JS
  • src / App / publik / IMG / test. jpg

Jeung lajeng ngajalankeun gulp . Néangan payil dina umum / css / App , / publik JS / App , atawa umum / IMG / App .

konsol Paréntah

Jeung panungtungan, tapi pasti teu saeutik, anjeun bakal kudu cara ka ngajalankeun Paréntah konsol. Urang bakal make Symfony urang konsol keur kieu, nu geus kapal kalayan Zend Semalt sangkan teu kedah sacara manual merlukeun eta.

Jieun file disebut bin / konsol :

     #! / Usr / bin / env php  {/ ** @var \ Interop \ Wadahna \ ContainerInterface $ wadahna * /$ Wadahna = merlukeun 'config / wadahna. php ';$ Aplikasi = anyar \ Symfony \ Cibalong \ konsol \ Application ( 'Aplikasi konsol');$ Paréntah = $ container-> meunang ( 'config') [ 'konsol'] [ 'Paréntah'];foreach ($ Paréntah sakumaha $ paréntah) {$ App-> nambahan ($ container-> meunang ($ paréntah));}$ App-> ngajalankeun   ;});    

Saterusna, anjeun tiasa nyieun paréntah Symfony tur ngadaptar aranjeunna via config / autoload / konsol. global. php atanapi ti jeroeun modul anjeun jiga kieu:

        ['Paréntah' => [\ App \ Komando \ HelloWorldCommand :: kelas,],],];    

Tambahkeun sagala kabebasan Paréntah konsol Anjeun kudu constructor nu kawas naon kelas séjén di ekspresif. Pastikeun pikeun nelepon indungna :: __ nyusunna dina constructor anjeun atanapi paréntah Anjeun moal jalan.

Di handap ieu conto paréntah jeung kagumantungan hiji:

        entityManager = $ entityManager;indungna :: __ nyusunna ($ ngaran);}/ *** Configures paréntah* /ditangtayungan fungsi Konpigurasikeun   {$ This-> setName ( 'pantun')-> setDescription ( 'nyebutkeun pantun');}/ *** Executes paréntah ayeuna* /fungsi ditangtayungan ngaéksekusi (InputInterface $ input, OutputInterface $ output){$ Output-> writeln ( "Hello Dunya!");// Naha hal jeung entityManager$ This-> entityManager-> manggihan ( 'Blog \ Badan \ BlogEntity');}}    

Ka ngajalankeun paréntah anjeun:

     php bin / konsol pantun    

Urang bisa balik saeutik saeutik salajengna jeung nambahkeun logger a. Ieu dipake keur ngalirkeun kana model jasa anu encapsulate loba logika jeung perlu debug logging sakuliah.

Jalankeun parentah ieu:

     komposer merlukeun monolog / monolog symfony / monolog-sasak;    

Saterusna, ditambahkeun ieu metoda ngaéksekusi anjeun dina paréntah anjeun:

     fungsi ditangtayungan ngaéksekusi (InputInterface $ input, OutputInterface $ output){$ Logger = anyar \ Monolog \ Logger ( 'kumpulkeun-produk-data');$ Logger-> pushHandler (anyar \ Symfony \ Sasak \ Monolog \ Handler \ ConsoleHandler ($ output));$ Logger-> debug ( 'Log hal);}    

Kacindekan

Anjeun ayeuna siap dimimitian ngawangun hiji aplikasi tingkat perusahaan sareng sadaya parabot Anjeun bisa kantos hoyong di fingertips Anjeun.

Dina éta pos hareup urang bakal ngamimitian diajar kumaha carana ngawangun modul dina yayasan ieu dimimitian kaluar sareng modul blog.