Back to Question Center
0

Արագ Ձեռնարկությունների հավելվածի զարգացում `Zend Expressive- ի հետ            Արագ Ձեռնարկությունների հավելվածի զարգացում Զենդ Էքսպրեսիվի հետ Վերլուծված թեմաներ. FrameworksPerformance & ScalingDevelopment Semalt- ը

1 answers:
Արագ ձեռնարկատիրական ծրագրերի մշակումը Zend Expressive- ի հետ
10) Եթե դուք երբեւէ կատարել եք Zend Semalt- ի արագ մեկնարկը, դուք հավանաբար երբեք չեք աշխատել Zend Semalt- ում: Արագ մեկնարկը պատմականորեն որեւէ բան է եղել, բայց արագ, եւ հեշտ է կորցնել հետաքրքրությունը եւ շարժվել դեպի հաջորդ բանը:

Զենդ Էքսպրեսը զգալիորեն բարելավում է այս փորձը, որը ստեղծում է վիզարդի վրա հիմնված կոմպոզիտոր ստեղծագործական նախագծի հրամանը: Այնուամենայնիվ, այն կարող է դեռեւս զարհուրելի լինել, քանի որ կան շատ ընտրություններ, որոնք առջեւում են: Այս ձեռնարկը ուղեցույց է ուղարկում ձեզ իմ առաջարկած կարգավորումների միջոցով արագ զարգանալու համար, որը
զիջում է ձեռնարկության մակարդակին, ուժեղ դիմում:

Այս ձեռնարկը ոչ թե ձեր միջավայրի ստեղծման մասին է, այնպես որ ես պատրաստվում եմ ենթադրել, որ դուք լավ աշխատանքային միջավայր ունեք, ինչպիսին է Homestead Improved- ը:

Եթե դուք չեք ծանոթ Semalt- ի կամ մեկուսացված վիրտուալ միջավայրի վրա, մենք զարմանալի գիրք ենք ձեռք բերել, որը ձեզ ուղղորդում է մեր խանութում առկա հստակեցումների միջոցով:

Նախագծի տեղադրում

Սկսեք ձեր նախագիծը `հրամանով ձեր պանակը, որտեղ դուք պահում եք ձեր ծրագրերը Կոդ Homestead Improved- ում

     կոմպոզիտոր ստեղծելու ծրագիր zendframework / zend-expressive-skeleton expressive    
10) Հուշում է, որ ճանապարհին մի քանի որոշումներ կայացնեն: Օգտագործեք հետեւյալ պատասխանները.

  • Որ տեսակի տեղադրում եք ուզում:
    • Մոդուլային
  • Որ կոնտեյները ցանկանում եք օգտագործել կախվածության ներարկումը:
    • Zend ServiceManager
  • Որ երթուղիչ եք ուզում օգտագործել:
    • Զենդ Ռուեր
  • Ինչ կաղապարի շարժիչ եք ուզում օգտագործել:
    • Twig
  • Որ սխալ վարիչ եք ուզում օգտագործել զարգացման ընթացքում:
    • Ովքեր
  • Խնդրում ենք ընտրել, թե որ կոնֆիգուրացիան եք ուզում ներարկել «Zend \ Validator \ ConfigProvider» - ը:
    • config / config. php
  • Հիշեք այս տարբերակը նույն տիպի այլ փաթեթների համար:
    • y
10) Այնուհետեւ, գործեք այս պատվիրանները - lemo drop vs lemo 2 by eleaf.

     cd արտահայտիչ &&git init &&git config գույնը: ui ճշմարիտ &&git ավելացնել. &&go commit -m «Նախնական պարտավորություն» &&chmod -R + w տվյալները;    

Սա նորաստեղծ թղթապանակում պահեստավորում է եւ պահեստավորվում է տվյալները թղթապանակ:

Այնուհետեւ, սկսեք php սերվեր, փորձարկման համար

     կոմպոզիտոր է ծառայում    

.եւ դիտեք http: // localhost: 8080 կամ պարզապես այցելեք VM- ի IP կամ վիրտուալ սերվեր, եթե օգտագործեք Homestead Improved- ը:

Հասկանալու Expressive

Semalt թղթապանակի կառուցվածքը հետեւյալն է.

     բեն /config /տվյալների /քեշ /հանրային /ինդեքս: phpsrc /Appփորձարկում/AppTestվաճառող /    
10) Դրանց մեծ մասը ինքնաբացարկ է: Expressive ապահովում է App մոդուլը լռելյայն. Դուք կարող եք տեղադրել ձեր բոլոր կոդերը այստեղ կամ կառուցել առանձին մոդուլներ, երբ դուք կառուցեք ավելի մեծ առանձնահատկություններ:

Սեմալտը գալիս է որոշակի հրամաններով, 11)

  • : / վաճառող / բին / արտահայտիչ - Ստեղծեք, գրանցեք եւ դյուրագրեք մոդուլները: Ստեղծեք միջնորմային դաս, եւ այլն.
  • կոմպոզիտոր cs-fix - Կատարել կոդավորման ստանդարտների ստուգում ձեր կոդը եւ ամրագրել հարցեր, հնարավորության դեպքում:
  • կոմպոզիտորների քննություն - Run PHPUnit թեստերը ձեր կոդը:
  • կոմպոզիտորական ստուգում - կողպված cs-check , ապա փորձարկում:

Expressive նաեւ գալիս է Withops error handler. Փորձարկելու համար բացեք src / App / src / Action / HomePageAction: php եւ տիպը echo $ badVar գործընթացում մեթոդով, ապա թարմացնել էջը: Դուք կտեսնեք Whoops- ի սխալ վարիչը:

Արագ Ձեռնարկությունների հավելվածի զարգացում `Zend Expressive- ի հետԱրագ Ձեռնարկությունների հավելվածի զարգացում Զենդ Էքսպրեսիվի հետ Վերլուծված թեմաներ.
FrameworksPerformance & ScalingDevelopment Semalt- ը

Անհրաժեշտ բարեփոխումներ

Արտացոլման հիման վրա վերացական գործարան

Zend Expressive- ը օգտագործում է Zend ServiceManager- ի կախվածության սեգալտը: Լռելյայն կարգավորումներում, անհրաժեշտ է ավելացնել կոնֆիգուրացիա եւ պոտենցիալ ստեղծել յուրաքանչյուր դասի համար գործարանային դասարան: Դա զգում է ծանրաբեռնված, երբ դա արվում է երկու անգամ:

Խուսափելու համար մենք հնարավորություն ենք ընձեռում Zend Semalt- ի տրամադրած արտացոլումը հիմնված վերացական գործարան:

Ավելացնել սա config / autoload / կախվածությունը: համաշխարհային. php 13 կախվածության մեջ զանգվածում,

     'abstract_factories' =>\ Zend \ ServiceManager \ AbstractFactory \ ReflectionBasedAbstractFactory :: դասը],    

Այժմ, երբ դուք աշխատում եք դասի մեջ եւ կախվածություն ունենաք, պարզապես ավելացրեք այն ձեր կոնստրուկտորին: Արտացոլման վերացական գործարանը կտեսնի, թե ինչ է պահանջում ձեր դասը եւ ավտոմատ կերպով գրավում է այն սպասարկման բեռնարկղից: Միայն դուք պետք է ստեղծեք գործարաններ, բացառիկ դեպքերում, երբ դուք պետք է ինչ-որ բան տարբերեք ծառայության կոնտեյների կողմից տրամադրված լռելյայն ծառայությանց:

Եթե դուք մտահոգված եք արագությամբ, Արտադրության մեջ մենք կարող ենք ունենալ մի գործընթաց, որը արտադրում է գործարաններ ձեր դասերի համար, որոնք զբաղվում են արտացոլման գործարանի կողմից վաճառողի / բենզին / գեներացնող գործարան-դասի համար :

Դոկտրին

Zend Expressive- ը ոչ մի տվյալների բազայի գործիքավորում չի տրամադրում կամ ORM- ին: Ես ընտրել եմ Semalt- ը, որպես իմ OMM- ի ընտրություն, շատ հետազոտություններից հետո եւ իմ սեփական մի քանի ORM- ի կառուցումից հետո: Դա պարզապես աշխատում է:

Տեղադրեք Doctrine եւ Symfony Yaml- ը կոմպոզիտորների միջոցով.

     կոմպոզիտորին պահանջում է dasprid / կոնտեյներ-միջդպրոցական դոկտրինի սիմֆոնիա / yaml    

Ստեղծել ֆայլ config / cli-config. php այս բովանդակությամբ.

       {/ ** @var \ Interop \ Container \ ContainerInterface \ $ կոնտեյներ * /$ container = պահանջել 'config / կոնտեյներ: php ';$ entityManager = $ container-> get (\ Doctrine \ ORM \ EntityManager :: class);վերադարձ ConsoleRunner :: createHelperSet ($ entityManager);});    

Փոխարինեք config / autoload / dependencies- ի բովանդակությունը: համաշխարհային. php հետեւյալով.

        ['abstract_factories' => [\ Zend \ ServiceManager \ AbstractFactory \ ReflectionBasedAbstractFactory :: դասը],// Օգտագործեք «այլ անուններ» `ծառայության անունը այլ ծառայություն անվանելու համար: The// բանալին է alias անունը, արժեքը այն ծառայությունն է, որը ցույց է տալիս. Ծառայության անունը քարտեզի վրա// դասի անունը: 'invokables' => [// ամբողջությամբ \ որակավորված \ InterfaceName :: class => լիովին \ որակավորված \ ClassName :: դաս,\ Դոկտրին \ DBAL \ Logging \ DebugStack :: class => \ Doctrine \ DBAL \ Logging \ DebugStack :: դաս,Օգնական \ ServerUrlHelper :: class => Helper \ ServerUrlHelper :: դաս,Middleware \ ImplicitHeadMiddleware :: class => Middleware \ ImplicitHeadMiddleware :: դաս,Middleware \ ImplicitOptionsMiddleware :: class => Middleware \ ImplicitOptionsMiddleware :: դաս,],// Օգտագործեք «գործարաններ» զանգերի / գործարանային դասերի կողմից մատուցվող ծառայությունների համար: 'գործարաններ' => [Դիմում `class class => Container \ ApplicationFactory :: class,Դելեգատ \ NotFoundDelegate :: class => Կոնտեյներ \ NotFoundDelegateFactory :: դաս,\ Դոկտրին \ ORM \ EntityManager :: class => \ ContainerInteropDoctrine \ EntityManagerFactory :: դաս,Օգնական \ ServerUrlMiddleware :: class => Helper \ ServerUrlMiddlewareFactory :: դաս,Օգնական \ UrlHelper :: class => օգնական \ UrlHelperFactory :: դաս,Օգնական \ UrlHelperMiddleware :: class => օգնական \ UrlHelperMiddlewareFactory :: դաս,Zend \ Stratigility \ Middleware \ ErrorHandler :: class => Կոնտեյներ \ ErrorHandlerFactory :: դաս,Middleware \ ErrorResponseGenerator :: class => Կոնտեյներ \ ErrorResponseGeneratorFactory :: դաս,Middleware \ NotFoundHandler :: class => Container \ NotFoundHandlerFactory :: դաս,],],];    

Ստեղծել այս ֆայլը դոկտրինի վարորդի համար config / autoload / doctrine: համաշխարհային. php :

        ['վարորդ' => ['orm_default' => ['class' => \ Doctrine \ Common \ Persistence \ Mapping \ Driver \ MappingDriverChain :: դաս,'վարորդները' => [],],],],];    

Ստեղծել այս ֆայլը ձեր տվյալների բազայի հավատարմագրման համար config / autoload / doctrine: տեղական: php :

        ['կապում' => ['orm_default' => ['params' => ['url' => 'mysql: // root: password1 @ localhost / expressive',],],],],];    

Փորձարկումը վազում է : / մատակարար / բեն / վարդապետություն : Դուք պետք է տեսնեք օգնության հուշումը:

Գուլպ

Գուլպը իմ ընթացիկ գործիքն է առջեւի աշխատանքի աշխատանքի համար: Կան բազմաթիվ շատ առարկաներ կառուցելու գործիքներ: Նայեք, եթե ցանկանում եք, բայց դուք կարող եք կորցնել այնտեղ ծովափնյա նոր JavaScript գրադարաններում: Ես չեմ ուզում այստեղ ներգրավվել, քանի որ դա ավելի շատ PHP- ի դասընթացք է, քան JS- ը, բայց ես ուզում եմ ցույց տալ, թե ինչպես է գուլպը պետք է կազմված լինի աշխատել Zend Expressive- ի հետ:

Ստեղծել փաթեթ: json ֆայլը այս բովանդակությամբ.

     {«անունը», «արտահայտիչ»,«տարբերակ». «1. 0»,"նկարագրությունը", "",«հիմնական»: «ինդեքսը»,"devDependencies": {«դել», «^ 3 0. 0»,«գուլպ»: «github: gulpjs / gulp # 4. 0»,«գուլպակախցիկ»: «^ 1. 1. 1»,"gulp-imagimen": "^ 3. 3. 0","gulp-minify-css": "^ 1. 2. 4","gulp-rename": "^ 1. 2. 2",«գուլպասոս»: «^ 3 .1. 0»,«ծաղրածու»: «^ 2 .1. 2»,"gulp-usemin": "^ 0. 3. 28"},«սցենարներ». {"test": "echo \" Error: ոչ մի փորձարկված \ "&& exit 1"},«հեղինակ». «»,«լիցենզիա», «ISC»}    

Run npm տեղադրել : Դուք կարող եք առաջադրվել npm update , նաեւ, եթե դուք գրել եք այս ձեռնարկը մի քանի օր հետո:

Այնուհետեւ ստեղծեք գուլպֆիլ. խնդիրը ('clean-css', function {վերադարձը del ('public / css', {force: true});});գուլպ. խնդիրը ('compile-sass', function {վերադարձը գուլպ: src ('src / * / public / sass / ** / *. scss', {base: '. /'}): խողովակ (cache ('compile-sass')): խողովակ (sass ) վրա ('error', sass. logError)): խողովակ (անվանափոխություն (գործառույթ (ճանապարհ) {ճանապարհին: dirname = ճանապարհը: Դիրնեյն: փոխարինել (/ ^ src \ / ([^ \ /] + \ /) հանրային \ / sass /, '$ 1');})): խողովակ (գուլպա dest ('public / css /'));});գուլպ. խնդիրը ('copy-css', function {վերադարձը գուլպ: src ('src / * / public / css / ** / *. css', {base: '. /'}): խողովակ (cache ('copy-css')): խողովակ (անվանափոխություն (գործառույթ (ճանապարհ) {ճանապարհին: dirname = ճանապարհը: Դիրնեյն: փոխարինել (/ ^ src \ / ([^ \ / + + / / public / css /, '$ 1');})): խողովակ (գուլպա dest ('public / css /'));});գուլպ. խնդիրը ('minify-css', function {վերադարձը գուլպ: src (['public / css / ** / *. css', '! public / css / ** / *. min. css'], {base: '. /'}): խողովակ (cache ('minify-css')): խողովակ (minifyCss ): խողովակ (անվանափոխություն (գործառույթ (ճանապարհ) {ճանապարհին: dirname = ճանապարհը: Դիրնեյն: փոխարինել (/ ^ public \ / css /, '');})): խողովակ (անվանափոխություն ({extname: 'min. css'}))): խողովակ (գուլպա dest ('public / css')),});գուլպ. task ('process-css', gulp- շարքը (['compile-sass', 'copy-css'], 'minify-css'));// JS վերամշակումըգուլպ. խնդիրը ('clean-js', function {վերադարձնել del ('public / js', {force: true});});գուլպ. խնդիրը ('copy-js', function {վերադարձը գուլպ: src ('src / * / public / js / ** / *. js', {base: '. /'}): խողովակ (cache ('copy-js')): խողովակ (անվանափոխություն (գործառույթ (ճանապարհ) {ճանապարհին: dirname = ճանապարհը: Դիրնեյն: փոխարինել (/ ^ src \ / ([^ \ / + + / / public \ / js /, '$ 1');})): խողովակ (գուլպա dest ('public / js /'));});գուլպ. խնդիրը ('minify-js', function {վերադարձը գուլպ: src (['public / js / ** / *. js', '! public / js / ** / *, min. js'], {base: '. /'}): խողովակ (cache ('minify-js')): խողովակ (uglify ): խողովակ (անվանափոխություն (գործառույթ (ճանապարհ) {ճանապարհին: dirname = ճանապարհը: Դիրնեյն: փոխարինել (/ ^ public \ / js /, '');})): խողովակ (անվանափոխություն ({extname: '. min. js'}))): խողովակ (gulp dest ('public / js')),});գուլպ. խնդիրը ('process-js', gulp. series ('copy-js', 'minify-js'));// Պատկերների մշակումըգուլպ. խնդիրը ('clean-img', function {{վերադարձ del ('public / img', {force: true});});գուլպ. խնդիրը ('process-img', function {{վերադարձը գուլպ: src ('src / * / public / img / ** / *. {gif, jpg, jpeg, png, svg}', {base: '. /'}): խողովակ (cache ('process-img')): խողովակ (imagemin ): խողովակ (անվանափոխություն (գործառույթ (ճանապարհ) {ճանապարհին: dirname = ճանապարհը: Դիրնեյն: փոխարինել (/ ^ src \ / ([^ \ /] + \ /) հանրային / img /, '$ 1');})): խողովակ (gulp dest ('public / img'));});// լավագույն մակարդակի հրամաններգուլպ. խնդիրը ('default', զուգահեռ ('process-js', 'process-css', 'process-img'));գուլպ. խնդիրը («մաքուր», զուգահեռ («clean-js», «clean-css», «clean-img»));գուլպ. խնդիրը ('watch', function {{գուլպ. watch (['src / * / public / sass / ** / *. scss', 'src / * / public / css / ** / *. css'], գուլպերի շարքը ('process-css'));գուլպ. ժամացույց ('src / * / public / js / ** / *. js', gulp. series ('process-js'));գուլպ. watch ('src / * / public / img / ** / *. {gif, jpg, jpeg, png, svg}', gulp- ի շարքը ('process-img'));});

Run gulp եւ համոզվեք, որ այն աշխատում է առանց սխալների:

Այժմ դուք կարող եք վազել գուլպը , կազմելու sass, minify css, minify js եւ օպտիմալացնել պատկերներ ձեր բոլոր մոդուլների համար: Դուք կարող եք հետեւել, որ գուլպա ժամացույցի հետ ունենալու համար դրանք բոլորը ինքնաբերաբար մշակվում են, քանի որ փոխվել են: The cache gulp մոդուլը ապահովում է, որ միայն փոխված ֆայլերը երբեւէ մշակվում են այնպես, որ դա պետք է շատ արագ փոփոխություններ կատարի:

Փորձեք սա ստեղծել հետեւյալ ֆայլերից մեկը,

  • src / App / public / sass / sasstest: scss
  • src / App / public / css / քննություն: css
  • src / App / public / js / test: js
  • src / App / public / img / test: jpg

Այնուհետեւ վազեց գուլպը : , public / js / App կամ public / img / App .

Կոնսոլի հրամաններ

Եվ վերջին, բայց հաստատ ոչ պակաս, դուք պետք է ճանապարհ գործադրեք մխիթարել հրամանները: Սիմֆոնիայի կոնսոլից մենք կօգտագործենք, որը արդեն տեղակայված է Zend Semalt- ի հետ, ուստի անհրաժեշտ չէ ձեռքով պահանջել:

Ստեղծել ֆայլ bin / console :

     #! / Usr / bin / env php  {/ ** @var \ Interop \ Container \ ContainerInterface $ կոնտեյներ * /$ container = պահանջել 'config / կոնտեյներ: php ';$ app = նոր \ Symfony \ բաղկացուցիչ \ Console \ Application ('Application консолі');$ commands = $ container-> get ('config') ['կոնսոլից'] ['հրամաններ'];foreach ($ հրամաններ, $ command) {$ app-> ավելացնել ($ container-> get ($ command));}$ app-> run   ;});    

Այնուհետեւ, Դուք կարող եք ստեղծել Symfony հրամաններ եւ գրանցեք դրանք config / autoload / մխիթարել միջոցով: համաշխարհային. php կամ ձեր մոդուլների ներսում նման:

        ['հրամաններ' => [\ App \ Command \ HelloWorldCommand :: դաս,],],];    

Ցանկացած կախվածություն ավելացրեք ձեր կոնսոլի հրամանները կոնստրուկտորին անհրաժեշտության դեպքում Expressive- ում ցանկացած այլ դասի նման: Համոզվեք, որ զանգահարեք ծնող: __ construct ձեր կոնստրուկտորին կամ ձեր հրամանը չի աշխատի:

Ահա մի օրինակ հրաման կախվածությամբ.

        entityManager = $ entityManager;ծնող: __ կառուցել ($ name);}/ *** Կոնֆիգուրացնում է հրամանը* /պաշտպանված գործառույթը configure   {$ this-> setName ('hello')-> setDescription ('Բարեւում է'),}/ *** Կատարում է ընթացիկ հրամանը* /պաշտպանված գործառույթը կատարելու համար (InputInterface $ input, OutputInterface $ output){$ output-> writeln ("Hello World!");// Կատարեք ինչ-որ բան entityManager- ի հետ$ this-> entityManager-> գտնել ('Blog \ Entity \ BlogEntity');}}    

Ձեր հրամանն անցկացնելու համար.

     php bin / console hello    

Մենք կարող ենք մի փոքր ավելի գնալ եւ ավելացնել անտառահատ: Սա օգտակար է ծառայության մոդելներին անցնելու համար, որոնք ներառում են բազում տրամաբանություն եւ խափանումների գրանցման կարիք ունեն:

Վազիր այս հրամանը.

     կոմպոզիտորին պահանջում է մենախոսություն / մոնոլոգի սիմֆոնիա / մոնոլոգ-կամուրջ;    

Այնուհետեւ ավելացրեք այն ձեր կատարման մեթոդը ձեր հրամանատարության մեջ.

     պաշտպանված գործառույթն իրականացնում (InputInterface $ input, OutputInterface $ output){$ logger = new \ Monolog \ Logger ('հավաքածուն-արտադրանք-տվյալներ');$ logger-> pushHandler (նոր \ Symfony \ Bridge \ Monolog \ Handler \ ConsoleHandler ($ output));$ logger-> debug ('Log մի բան);}    

Եզրակացություն

Դուք այժմ պատրաստ եք սկսել ձեռնարկության մակարդակի հայտը բոլոր այն գործիքների հետ, որոնք դուք երբեւէ կարող եք ձեռք բերել ձեր մատների վրա:

10) Հաջորդ գրառումով մենք սկսում ենք սովորել, թե ինչպես կառուցել մոդուլներ այս հիմնադրամում, սկսելով բլոգային մոդուլով: