Back to Question Center
0

Pêşveçûna Rapid Enterprise App bi Zend Expressive            Pêşveçûna Rapid Enterprise App bi Zend Expressive Têkilî: FrameworksPerformance & ScalingDevelopment Semalt

1 answers:
Pêşveçûna Rapid Enterprise App bi Zend Expressive

Gava ku tu carî bi destpêka Zend Semalt zû kirî, tu carî qet li Zend Semalt dixebite. Destpêk zûtirîn dîrokek dîrokek zûtir bûye, û hêsantir e ku meriv balkêş wenda dike û li ser tiştek din.

Zend Expressive bi vê tecrûbeyê bi bandora wizard karsaziya avakirina projeyê birêvebirin. Lêbelê, ew jî hîn dibe ku ji bo sazkirina gelek bijartan in ku pêşiya xwe bikin hene. Ev rêberên rêbazên ku hûn ji bo pêşveçûna lezgîniyê ya pêşniyarê min pêşniyar kir ku dê
hilberîna pîşesazî, serîlêdanê.

Pêşveçûna Rapid Enterprise App bi Zend ExpressivePêşveçûna Rapid Enterprise App bi Zend Expressive Têkilî:
FrameworksPerformance & ScalingDevelopment Semalt

Vê tutorial ji bo hawîrdora xwe ava bike, ji ber vê yekê ez ê dihêle ku hûn li hawîrdewleta Xweseriya Xweser a Karmend a baş e.

Heke hûn ne bi Semalt an hawirdora hawirdora xwe yên naskirî ne, pirtûka xwe ya ecêb heye ku hûn ji hêla derfetên me ve di nav dikana me de rêber bikin.

Project Setup

Projeya xwe ya ku bi rêvebira jêrîn dihêle ku hûn li peldanka we ya projeyên xwe biparêze ( Kodê li ser Homestê çêtirîn çêkirî):

     composer create-project zendframework / zend-expressive-skeleton expressive    

Hûn dê ji bo rêbazên çend rêveyan pêk bînin. Van bersivên bikar bînin:

  • Çawa cure sazkirinê dixwazî?
    • Modular
  • Kîjan kîjan kû hûn dixwazin ji bo înfeksiyonê girêdayî ye?
    • Zend ServiceManager
  • Tu kîjan router dixwazin hûn bixwazin?
    • Zend Router
  • Enstîtuya kîjan kîjan şablonê hûn dixwazin bikar bînin?
    • Twig
  • Çewtiya kîjan şaşkeriyê hûn dixwazin di dema pêşveçûnê de bikar bînin?
    • Whoops
  • Ji kerema xwe pelê kîjan sazkirinê dixwazî ​​hûn dixwazin 'Zend \ Validator \ ConfigProvider' binivîse?
    • config / config. php
  • Ji bo pakêtên din ên heman şêwrê bijare vê bîr bînin?
    • y

Piştre, van emiran bistînin:

     cd expressive &git init &rengê git config. ui rast &git add. &&git commitment -m "Initial commitment" &chmod -R + w data;    

Ev peldankek nû li peldanka nû çêkirî ye û destûra peldanka nivîskî tête nivîsandin.

Piştre, ji bo testa phpê dest bi testkirina

     Şemokerê xizmetê    

.û li vir hilbijêre http: // localhost: 8080 an tenê merivê mêvandar a VM an jî malpera malperê bike ku hûn bi karanîna Homestead çêtir bikin.

Pêşveçûna Rapid Enterprise App bi Zend ExpressivePêşveçûna Rapid Enterprise App bi Zend Expressive Têkilî:
FrameworksPerformance & ScalingDevelopment Semalt

Têgihîştina Expressîf

Structural folder of semalt like this:

     bin /config /jimare/cache /alenî/naverok. phpsrc /Appîmtîhan/AppTestfirotkar/    

Piranîya xweser eşkere ye. Expressîfîfê bi modulûrekê veguherîneke module App pêşkêş dike. Hûn dikarin hemî kodê xwe li vir binivîsin, an jî modulên cuda yên ku hûn taybetmendiyên mezintir çêbikin ava bikin.

Semalt bi hin emirên din re tête:

  • . / vendor / bin / expressive - Vebijêrk, navnîşan, û modela deregister. Çîna navîn, hûrgelan çêbikin.
  • composer cs-fix - Koda standardên kontrola li ser kodê te kontrol bikin û pirsgirêkên çareser bikin, ku derfet.
  • testa testê - testa PHPUnit li ser kodê xwe bidin.
  • Komîsyona kontrol - Ji bo rakirina testa cs-check , dûre ceribandinê.

Expressîfî bi şaşiya whoops re tête. Ji bo ceribandin, src / App / src / Çalak / HomePageAction veke. php û cureyê $ badVar di pêvajoya rêbazê bistînin, paşê rûpelê nû bike. Hûn ê çewtiyek whoops bibînin.

Pêşveçûna Rapid Enterprise App bi Zend ExpressivePêşveçûna Rapid Enterprise App bi Zend Expressive Têkilî:
FrameworksPerformance & ScalingDevelopment Semalt

Pêşxistina Pêşeroj

Perfona Bingehiya Abstract

Zend Expressive ji bo Zend ServiceManager ji bo Semaltiya Navendî. Di sazkirinê de default, hûn hewce ne ku sazkirina veguhastinê û bi potansiyona fabrîkek ji bo her teyek ji we re binivîsin çêbikin. Di vê derê de du carî ev tengas dibe.

Ji bo ku ji vê yekê ve vebe, em ê li fabrîkaya abstractê ya bi Zend Semalt re pêşkêş dikin.

vê yekê config / autoload / girêdayîbûna xwe zêde bikin. cîhane. php di çarçoveya de girêdayî array:

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

Niha, gava ku hûn di kursî de dixebite û hewceyê hewceyê hewce ne, tenê li wê avahiyê xwe zêde bike. Fabrîkaya abstractê dê bibînin ka kîjan hewceyê hewceyê we û bixweber bixweber ji navenda karmendê xwe bigire. Hûn tenê hewce ne ku hûn fabrîkan çêbikin ku niha di rewşên awarte de ku tu hewceyê ku hûn hewceyê ku ji karmendên xizmetê ve ji alîyê xizmetê ve girêdayî deyne be.

Heke hûn di lezê de fikar dikin Di hilberînê de, em dikarin pêvajoyek ku fabrîkên we ji hêla fabrîkaya refên vekirî vendor / bin / hilberîn-fabrîk-ê-çar çêbûye pêvajoyê heye.

Çîrok

Zend Expressive nirxandina torûbar an ORM pêşkêş dike. Min Semalt wekî wekî bijartina xwe ya ORM hilbijartin û piştî çend lêkolîn û hindikên ormarên xwe yên avakirin. Ew tenê dixebite.

Bi rêya Composer Installation and Symfony Yaml Installation:

     Komkujî hewceyê dasprid / konser-interop-doctrine symfony / yaml    

pelê config / cli-config biafirîne. bi van pirtûkan (php)

       {/ ** @var \ Interop \ Container / ContainerInterface \ $ konferans * /$ container = ji bo 'config / container.' php ';$ entityManager = $ container-> bibînin (\ Doctrine \ ORM \ EntityManager :: class);Vegere ConsoleRunner :: createHelperSet ($ entityManager);});    

pirtûkên config / autoload / girêdan veguherînin. cîhane. php bi jêrîn re:

        ['abstract_factories' => [\ Zend \ ServiceManager \ AbstractFactory \ ReflectionBasedAbstractFactory :: class],// navê bikarhênerên 'bikarhêneran' ji bo navê xizmetê ji bo xizmetek din. Ew// key key navê alî ye, nirxê xizmeta ku ew xala ye. Nexşeya navenda xizmetê ji bo// navê navîn. 'invokables' => [// Fully \ Qualified \ InterfaceName :: class => Bi tevahî \ Qualified \ ClassName :: class,\ Dîtekariya \ DBAL \ Logging \ DebugStack :: class => \ Doktor \ DBAL \ Logging \ DebugStack :: class,Helper \ ServerUrlHelper :: class => Helper \ ServerUrlHelper :: class,Middleware \ ImplicitHeadMiddleware :: class => Middleware \ ImplicitHeadMiddleware :: class,Middleware \ ImplicitOptionsMiddleware :: class => Middleware \ ImplicitOptionsMiddleware :: class,],// Ji bo karên xizmetan ji bo karsaziyên / fabrîkên fabrîk têne bikaranîn. 'fabrics' => [Serîlêdanê :: class => Container \ ApplicationFactory :: class,Delegate \ NotFoundDelegate :: class => Container \ NotFoundDelegateFactory :: class,\ Dîtekariya \ ORM \ EntityManager :: class => \ ContainerInteropDoctrine \ EntityManagerFactory :: class,Helper \ ServerUrlMiddleware :: class => Helper \ ServerUrlMiddlewareFactory :: class,Helper \ UrlHelper :: class => Helper \ UrlHelper ::Helper \ UrlHelperMiddleware :: class => Helper \ UrlHelperMiddlewareFactory :: class,Zend \ Stratigility \ Middleware \ ErrorHandler :: class => Container \ ErrorHandlerFactory :: class,Middleware \ ErrorResponseGenerator :: class => Container \ ErrorResponseGeneratorFactory :: class,Middleware \ NotFoundHandler :: class => Container \ NotFoundHandlerFactory :: class,],],];    

Vê pelê ji bo sazkirina ajokrasiyê config / autoload / doctrine saz bike. cîhane. php .

        ['driver' => ['orm_default' => ['class' => \ Doktor \ Giştî \ Niştecîh \ Mapping / Driver \ MappingDriverChain :: class,'drivers' => []],],],];    

Vê pelê ji bo daneyên daneyên belaş config / autoload / doctrine çêbike. herêmî. php .

        ['girêdan' => ['orm_default' => ['params' => ['url' => 'mysql: // root: password1 @ localhost / expressive'],],],],];    

Tîm bi rêvegirtinê . / vendor / bin / doctrine . Divê hûn alîkariya lezgîn bibînin.

Gulp

Gulpê amûra xwe ya hilbijartinê ya ji bo karûbarên pêşiya rojane ye. Gelek hene, gelek amûrên avahiyên avahiyê hene. Heke hûn dixwazin dixwazin, lê hûn dikarin li deryayê yên pirtûkxane yên nû yên pirtûkxaneyên şîn ên winda winda bibin. Ez naxwazim vir li vir jî tev lê tevlihev bikim ku ev ji hêla JS-ê ve ji hêla PHP ve ye, lê ez dixwazim bibêjim ka çiqas gulp divê ji bo Zend Expressive kar bikim.

pakêtek biafirînin. bi van materyalên pelan bi json re:

     {"name": "expressive""version": "1. 0. 0","description": """main": "index" js ""devdependencies": {"del": "^ 3. 0. 0","gulp": "github: gulpjs / gulp # 4" 0,"gulp-infîkal": "^ 1. 1. 1""gulp-imagemin": "^ 3. 3. 0","gulp-minify-css": "^ 1. 2. 4","gulp-rename": "^ 1. 2. 2","gulp-sass": "^ 3. 1. 0","gulp-uglify": "^ 2. 1. 2","gulp-usemin": "^ 0. 3. 28"},"scripts": {"test": "echo \" Çewtiyek: tu testek \ "& derketina 1"},"nivîskar": """lîsans": "ISC"}    

Run npm saz bike . Hûn dikarin bixwazin ku rojnameyên npm jî diçin, heger hûn piştî ku ev nivîsar nivîsandine xwendin.

Piştre, gulpfile ava bike. (task-css ', fonksiyonê {Vegere del ('public / css', {hêz: rast});});gulp kar ('compile-sass', fonksiyonê {gulan vegerin. src ('src / * / public / sass / ** / * .css', {base: '/'}}. pipe (cache ('compile-sass')). pipe (sass li ser ('error', sass. logError)). pipe (rename (function (path) {şop. dirname = riya dirname. guhertin (/ ^ src \ / ([^ \ /] + \ / a) / \ / sass /, '$ 1');})). pipe (gulp. dest ('public / css /'));});gulp (task-css ', fonksiyonê {gulan vegerin. src ('src / * / public / css / ** / * .css', {base: '/'}). pipe (cache ('copy-css')). pipe (rename (function (path) {şop. dirname = riya dirname. guhertin (/ ^ src \ / ([^ \ /] + \ / a) \ \ css /, '$ 1');})). pipe (gulp. dest ('public / css /'));});gulp karê ('minify-css', fonksiyonê {gulan vegerin. src (['public / css / ** / * .css', '!' / public / css / ** / *. min. css '], {bas:' / '}). pipe (cache ('minify-css')). pipe (minifyCss . pipe (rename (function (path) {şop. dirname = riya dirname. guhertin (/ / public / css /, '');})). Pipe (rename ({extname: 'min .css'})). pipe (gulp. dest ('public / css'));});gulp karê ('process-css', rêziknameya gulp ("'compile-sass', 'copy-css'], 'minify-css'));// JS Processinggulp (task-js ', fonksiyonê {Vegere del ('public / js', {hêz: rast});});gulp (task-js ', fonksiyonê {gulan vegerin. src ('src / * / public / js / ** / * .js', {bingeh: '/'}}. pipe (cache ('kop-js'). pipe (rename (function (path) {şop. dirname = riya dirname. guhertin (/ ^ src \ / ([^ \ /] + \ / a) \ \ js /, '$ 1');})). pipe (gulp. dest ('public / js /'));});gulp karê ('minify-js', fonksiyonê {gulan vegerin. src (['public / js / ** / * js', 'public! / js / ** / *. min .Js'], {bingeh: '/'}}. pipe (cache ('minify-js'). pipe (uglify)). pipe (rename (function (path) {şop. dirname = riya dirname. guhertin (/ ^ public \ / js /, '');})). pipe (rename ({navname: 'min. js'}). pipe (gulp. dest ('public / js'));});gulp (task-js ', series series' gulp ('kop-js', 'minify-js'));// Image processinggulp (task-img ', fonksiyonê {Vegere del ('public / img', {hêz: rast});});gulp karê ('process-img', fonksiyonê {gulan vegerin. src ('src / * / public / img / ** / *. {gif, jpg, jpeg, png, svg}',, 'bingeh:' / '}). pipe (cache ('process-img'). pipe (imagemin)). pipe (rename (function (path) {şop. dirname = riya dirname. guhertin (/ ^ src \ / ([^ \ /] + \ / a) \ \ img /, '$ 1');})). pipe (gulp. dest ('public / img'));});// Top level commandsgulp (task ',' pêvajoya-img '));gulp karê ('paqij', gulp-parallel ('clean-js', 'clean-css', 'clean-img'));gulp karê ('watch', fonksiyonê {gulp ('' / src / * / public / sass / ** / scss ',' src / * / public / css / ** / * .css '], gulp. series (' process-css '));gulp lêbigere ('src / * / public / js / ** / * .js', series 'gulp' ('process-js'));gulp watch ('src / * / public / img / ** / *. {gif, jpg, jpeg, png, svg}', gulp. ('process-img');});

Run gulp û bicîh bikin ku bêyî şaşî ne.

Niha hûn dikarin gulp ji bo sassê, css derxistin, js xistin, û li seranserê modulên xwe baştir bikin. Hûn dikarin li ser gulp gulp ji bo her tişt bixweber kirin ku ew guhertin. Module gulp module dike ku tenê pelên guherîn têne pêvajoy kirin, da ku ev gav bi lez guhertin.

Vê yekê ji van pelan çêbikin:

  • Çavkanî / App / public / sass / sasstest. scss
  • src / App / public / css / test. css
  • Çavkanî / App / public / js / test. js
  • src / App / public / img / test. jpg

Piştre gulp . Ji bo pelên di 13 (giştî) giştî / css / App , giştî / js / App , an jî giştî / img / App binêre.

Komelên Console

Di dawiyê de, lê bi rastî, ne kêm, hûn ê hewce ne ku rêbazên kongreya console bikar bînin. Em ê ji bo vê konsolê ya Symfony bikar bînin, ku ji berê ve bi zend Semend Zend re bikar tîne, da ku em hewce ne hewce ne hewce ne.

pelê bin / console (

     #! / Usr / bin / env php  {/ ** @var \ Interop \ Container \ ContainerInterface $ container * /$ container = ji bo 'config / container.' php ';$ app = \ Symfony \ Component \ Konsole \ Application ('Konsolea Serlêdanê');$ commands = $ container-> get ('config') ['console'] binivîse.Pêşbigere (biryara $ $ wekî $ command)$ app-> add ($ container-> get ($ command));}$ app-run   ;});    

Hingê, hûn dikarin birêveberên Symfony ava bikin û bi rêya config / autoload / console bi wan re qeyd bikin. cîhane. php an ji hundurên modulayên mîna vê yekê:

        ['commands' => [\ App \ Fermana \ HelloWorldCommand :: class,],],];    

Hêzên konseya konsolê yên we hewceyê avahiyê wek merivên din ên ku di Expressîfê de hewceyê hewce dike. Bawer bikin ku dêûbav meriv :: __ çêkirina di nav avahîşka we de yan emrê we dê kar nekin.

Vê gavê mînakek bi rekêşiyek e:

        entityManager = $ entityManager;dêûbav :: __ ava ($ name);}/ *** Fermana danûstandin* /karûbar parastin   {$ this-> setName ('hello')-> setDescription ('Dîroka hello');}/ *** Fermandariya niha destûr dike* /Performansa parastinê (InputInterface $ input, OutputInterface $ output){$ output-> nivîseln ("Cihana Welat!");// Tu tiştek bi yekîtiya Rêveberiyê$ this-> entityManager-> Find ('Blog \ Entity \ Blog Entity');}}    

Ji bo biryara xwe bigire:

     php bin / console hello    

Em dikarin piçûk hinekî biçin û pevçûnek zêde bike. Ew ji bo modela xizmetê ya ku gelek pir maqaqet dike vebawer e û hewce dike ku di tevahiya navnîşan de tête kirin.

vê yekê emir bike:

     komkujî hewce dike monolog / monolog-symfony / monolog-bridge;    

Piştre, di vê fermanê de ev rêbazê biryara xwe zêde bike:

     Performansa parastina parastinê (InputInterface $ input, OutputInterface $ output){$ logger = new \ Monolog \ Logger ('collect-product-data');$ logger-> pushHandler (new \ Symfony \ Bridge \ Monolog \ Handler \ ConsoleHandler ($ hilbijêre));$ logger-> debug ('tiştek têkeve');}    

Vebijêrk

Hûn niha amadekirin ku hûn dest bi sazkirina pîşesaziya pîşesaziyê bi hemî amûrên ku hûn her tiştî bi destên xwe dixwazin dixwazin.

Di paşiya paşîn de em ê bizanibin ka çawa li ser vê bingehê amadekaran çêbikin, bi moduleka blogê ve dest pê dike.