Quick Start Symfony DI (Instealladh Spleáchas) Teagaisc

De réir Watkin Lloyd Steven , Dé Sathairn 14 Lúnasa, 2010 14:21

Cad é Instealladh Spleáchas (D)?

Is instealladh Spleáchas teicníocht a ligeann do rudaí loosely cúpláilte laistigh de feidhmchlár bogearraí. Go ginearálta, má éilíonn an rud le rochtain ar an fheidhmiúlacht eile a bheadh ​​sé instantiated hinmheánach as a córais docht cúpláilte. Trí instealladh spleáchas muid instealladh de dhíth ar na cuspóirí réidh le húsáid (uaireanta tagairt chomh maith do inbhéartaithe rialaithe - hOifige). Tóg an sampla seo a leanas:

  <? Php
 DecisionMaker rang {
     makeDecision feidhm phoiblí (eagar paraiméadair $) {
         / / An riachtanas is gá ar an mbunachar sonraí adapter
         $ DP DecisionParameters = nua ();
         $ ParameterScore = getScore $ DP-> ($ paraiméadair);
         / * ...  Roinnt loighic chinnidh tuilleadh ...  * /
         tuairisceán ($ parameterScore> 50);
     }
 } 

Is é seo an píosa de chód sin a bheith in éineacht dlúth leis an DecisionParameters réad. Athscríobh an méid sin thuas ar bhealach loosely cúpláilte ba mhaith linn go bhfuil rud éigin cosúil le ....

 <? Rang DecisionMaker php {$ _dp phríobháideach; feidhm phoiblí __construct ($ DP) {$ seo-> _dp = $ DP;} makeDecision feidhm phoiblí (eagar $ paraiméadair) {$ parameterScore = $ seo getScore-> _dp-> ($ paraiméadair); / * ...  Roinnt loighic chinnidh tuilleadh ...  * / Tuairisceán ($ parameterScore> 50);}} 

Cé fháil ar na buntáistí a bhaineann le cód loosely cúpláilte táimid ag cur le castacht den sórt sin gach aon uair ar rud instantiated ní mór dúinn freisin a instantiate a spleáchais agus na pas i freisin. Mar shampla, seo:

  $ Rogha = DecisionMaker nua ();
 macalla makeDecision $ rogha-> (eagar ('iarracht' => 'íseal', 'ar ais' => 'ard')); 

thiocfaidh chun bheith anois:

  $ DP DecisionParameters = nua ();
 $ Rogha = DecisionMaker nua ($ DP);
 macalla makeDecision $ rogha-> (eagar ('iarracht' => 'íseal', 'ar ais' => 'ard')); 

éiríonn an staid seo níos pianmhar le líon na spleáchais do rang a mhéadú, agus cad iad féin má tá an spleáchais spleáchais a bheith? Is féidir é seo a bheith go maith go tapa ar nightmare riaracháin réad! Cuir isteach coimeádáin instealladh cleithiúnas (nó creataí) ...

Gabhdáin Instealladh Spleáchas / Frameworks

coimeádáin instealladh Spleáchas (nó creataí) déileáil leis an bpróiseas chun agóid a chruthú; instantiating agus instealladh aon spleáchais sular fhill sé ar chás ar an té atá ag glaoch.

I do chód rudaí nua a chruthú seachas iarratas díreach againn cóip den agóid ón gcoimeádán DI. Tá an cuspóir atá againn cheana féin ar ais go léir a spleáchais ghann agus is é an rud réidh le dul.

Symfony Coimeádán Instealladh Spleáchas

Symfony Is dócha fearr aithne ar a n-iomlán Stack MVC creat scaoileadh, áfach, tá siad chomh maith le roinnt de na comhpháirteanna is féidir a úsáid go neamhspleách. Mar shampla, an coimeádán instealladh spleáchas táimid ag dul chun labhairt faoi anseo, ar YAML , ar templating, inneall féach parsálaí comhpháirteanna Symfony ar feadh níos mó.

Symfony coimeádán DI Tá an bunaithe ar an gCreat Earraigh i Java .

Bootstrapping

D'fhonn an creat Symfony bootstrap instealladh spleáchais a úsáidimid chód san áireamh mar atá thíos. Roghnaigh mé a úsáid ach mar gheall ar a chuid YAML éasca le léamh agus setup. Le luas uasta b'fhéidir gur mhaith leat a scríobh amach do choimeádáin a plain PHP (an coimeádán Symfony féidir é seo a dhéanamh ar do shon uair thus), nó de rogha air taisce an coimeádán ar fad ag baint úsáide as Zend_Cache , nó a leithéid.

Chun a shuiteáil Symfony DI treoracha bhí anseo http://components.symfony-project.org/dependency-injection/installation , agus é a chur le do chosáin.

  / / Luchtaigh an DI Symfony coimeádán
 a cheangal ar 'sfServiceContainerBuilder.php';
 $ Coimeádán = sfServiceContainerBuilder nua ();
 $ Loader = sfServiceContainerLoaderFileYaml nua ($ coimeádán);
 ualach $ loader-> (APPLICATION_PATH '/ config / di / services.yml'.); 

Gcéad dul síos againn instantiate coimeádán nua, agus ansin ualach ar ár cumraíocht ó chomhad YAML againn. Tabhair faoi deara: DI féidir choimeádán an t-ualach cumraíochta as bhformáidí éagsúla, mar shampla XML , YAML, PHP, agus INI *. claonadh agam a chur san áireamh YAML aonair comhad agus comhaid eile a allmhairiú ón taobh istigh ann.

Is féidir le roinnt chomhaid cumraíochta a allmhairiú ag baint úsáide as bhformáidí éagsúla, ag na sainmhínithe níos nuaí overwriting siúd atá sainithe cheana féin. Is féidir na comhaid Cumraíocht tagairtí do nithe agus paraiméadair.

* INI ach in ann a paraiméadair shainiú agus a bhfuil ann a allmhairiú comhaid eile

Cumraíocht Sampla

  allmhairí:
 - {Acmhainn: daos.yml}

 paraiméadair:
 ainm úsáideora: bréagach

 Seirbhísí:
 # Samhail do Chustaiméirí
 model.customer:
 Rang: Pro_Customer
 glaonna:
 - [SetLogger, [@] utils.logger]
 - [SetDao, [@ data.userdata.mysql]]
       - [SetUserName, [% ainm úsáideora%]]

 # Samhail Táirge
 model.product:
 Rang: Pro_Product
     hargóintí: [% ainm úsáideora%, {Cineál:%% accesslevel, lastlogin:% lastlogin%}]
 glaonna:
 - [SetDao, [@ data.product.mysql]]

 # Logger
 utils.logger:
 Rang: Pro_Logger
     constructor: getInstance
 glaonna:
 - [SetHandle, [@] utils.filewriter] 

Sílim go bhfuil an cód féin mínithe thuas go cóir ar mhaithe le soiléireacht, ach beidh mé míniú a thabhairt ar gach cuid anois.

An Chéad amach againn a shainiú roinnt allmhairí (ie comhaid eile a pharsáil), is maith liom mo ghrúpa bhfoirmíochtaí do DAOs mar shampla i gcomhad amháin, fóntais eile agus ainm an chomhaid cuí. Cé go bhfuil beagán níos moille luasanna sé suas ar chothabháil an chomhaid cumraíochta. A freisin go bhféadfaí a pharsáil formáidí comhaid eile ag baint úsáide as bratacha ar allmhairí éagsúla. Comhaid a pharsáil in ord le sainmhínithe níos nuaí overwriting nó lena leasófar seirbhísí roimhe sin a shainmhínítear / paraiméadair.

Next muid a shainiú pharaiméadar, is féidir le paraiméadar a chur i gcoitinne ar aon chineál athraitheach PHP. Ag an bpointe seo ní raibh a fhios agam cad ba cheart mo paraiméadar ainm úsáideora a (is gá dom a fhíordheimhniú le sin!), Agus mar sin tá mé sainithe ag luach réamhshocraithe agus beidh mé ag scríobh go bhfuil luach níos déanaí. Tabhair faoi deara nach bhfuil, ranganna instantiated go dtí go iarraidh ort le haghaidh sainmhíniú orthu sin paraiméadair beagán is déanaí breá breá. Tar éis seo a shainiú mé roinnt seirbhísí:

  1. Instantiate Pro_Customer, logger pas a bhfuil drochriarachán i mo chuig an setLogger () modh, cuir i mo MySQL réad rochtain ar shonraí (DAO), agus pas a fháil sa ainm úsáideora chomh maith. Gach uair iarr mé ar an réad Ba mhaith liom dul síos nua
  2. Cruthaigh bhfuil drochriarachán i Pro_Product, pas argóintí d'ainm úsáideora agus do roghanna eagar ar an constructor. Tar éis setDao instantiation glao () agus pas é mo táirge OCC
  3. Tabhair dom cóip de Pro_Logger, sé instantiate baint úsáide as an getInstance () modh agus cóip de mo réad scríbhneoir comhad pas a fháil trí setHandle () aon uair amháin ar a luchtú. Is é mo scríbhneoir comhad a shainmhínítear i gceann de mo allmhairí.

Laistigh den comhad cumraíochta seirbhísí tagartha ag ionad spás an t-ainm le '@' tsiombail ar, paraiméadair atá tagartha ag ionad spás agus ag ceangal le '%' siombailí,%% ainm úsáideora eg@utils.logger.

sonraí a chuirfear an bpost luchtú

Uaireanta, nach bhfuil fhios agat cad é luach na paraiméadair a ba cheart a chur go dtí tar éis duit bootstrapped, mar lenár paraiméadar ainm úsáideora thuas. D'fhonn a scríobh ar an luach an offsetSet () modh a úsáidtear, an gcéad dul síos an t-ainm a rith paraiméadar le leanúint ag a luach nua:

  offsetSet $ ​​coimeádán-> ('ainm úsáideora', $ ainm úsáideora); 

Cuspóirí fháil ón gcoimeádán

Nuair a thus seachas rudaí instantiating díreach linn dul anois leis an gcoimeádán DI a thabhairt i gcásanna a fháil. Leis an DI Symfony tugaimid an getService () modh, ag dul i teaghrán a chuireann síos ar an athróg a theastaíonn uait a fháil, mar shampla,

 $ Logger = getService $ coimeádán-> ('utils.logger'); 

Beidh sé seo feidhmeanna atá comhionann le:

  $ Logger = Pro_Logger:: getInstance ();
 $ FileWriter = Pro_Writer_FileWriter nua ();
 $ Logger-> setHandler ($ fileWriter); 

Is féidir a dhéanamh amach an gcoimeádán ag an bhfuil drochriarachán i seirbhís trí ghlaoch ar an hasService () modh, a tuairisceáin luach Boole.

A ní gá chun rochtain a fháil ar an gcoimeádán thar an leibhéal is fearr d'iarratas a fháil ó aon uair amháin ar chás gach ceann de na spleáchais a cheanglaítear ceart síos go dtí an doimhneacht deepest thus d'iarratas cheana féin agus a bheidh le glaoch ag fanacht.

Aonad Tástála

Spleáchas instealladh Tá an tairbhe bhreise a ligeann rudaí atá le tástáil ina n-aonar. Ag cur leis an rang mar shampla DecisionMaker roimh cur chun feidhme an t-instealladh thus spleáchas torthaí tástála a bhí againn freisin, ag brath ar chur i bhfeidhm ar an rang DecisionParameters.

Má iarrann an rang éagsúla ar ais DecisionParameters torthaí tástálacha bhféadfadh ár n-éagmais tús gan aon locht ar ár gcuid féin. Ag baint úsáide as instealladh spleáchas is féidir linn anois pas a fháil i réad DecisionParameters a tuairisceáin a dtugtar / seasta sraith torthaí do pharaiméadair ionchur áirithe, táimid ag tástáil anois DecisionMaker ar leithligh ó aon fhachtóirí seachtracha, ie má tástálacha tús lenár dá éagmais sin is féidir a chur i leith go díreach le rud éigin a athrú sa rang DecisionMakeer. Tá sé seo thar a bheith tábhachtach ba chóir duit a bheith ag brath ar na sonraí tástála ó bhunachar sonraí le haghaidh tástála.

Iarratais Cumraíocht

Beidh an mbealach ina oibríonn d'iarratas ar do fhreastalaí a tháirgeadh dosheachanta difriúil ó do thus fhorbairt. Mar shampla, i dtimpeallacht a fhorbairt a bheadh ​​ar an leibhéal logáil isteach a bheith i bhfad níos mó granular ná ar do chóras táirgthe. De réir a athrú ag brath ar do chomhaid cumraíochta instealladh coimeádán beagán (nó parsáil comhad cumraíochta bhreise) ar an athrú ar iompar ag brath ar an gcomhshaol é a dhéanamh simplí.

De réir cineáil hinting ar an gcomhéadan seachas implementations nuair a bhunú do spleáchais a freisin go bhféadfaí babhtála amach comhpháirteanna maidir le comhpháirteanna luí le cúpla líne de YAML nó XML. Mar shampla, is féidir leat teacht ar do bhunachar sonraí faoi láthair trí OCC MySQL (Rochtain Sonraí Cuspóir), ach san am nó féadfaidh tú a fhorbairt pdo, Zend_Db, Teagasc cur chun feidhme an OCC. De réir a chur i bhfeidhm nua isteach i do chumraíocht comhad tobann na rudaí go léir a úsáidtear ar an sean-MySQL cur chun feidhme atá in úsáid anois do chur chun feidhme nua gan gá a ionsaí ar an bowels ar d'iarratas.

Nótaí

  • Trí roinnte: fíor sa chumraíocht tá léargas tugtha i gcónaí ar an dul céanna rud. Tá sé seo an-úsáideach agus iad ag déileáil le rudaí a bhfuil acmhainní ar nós naisc bunachar sonraí, Láimhseálann comhad, srl
  • Tá dhá mhodh inar féidir spleáchais a instealladh. Is é ceann a spleáchas ar aghaidh leis an constructor, nó de rogha air trí mhodhanna setter. Is é an patrún nglactar leo go ginearálta ag teastáil chun pas a spleáchas tríd an cruthaitheoir agus optionals trí setters. Is é mo rogha pearsanta a setters úsáid le gach rud, ach tá sé seo síos go dtí an bhforbróir aonair

Mar fhocal scoir ....

Chomh maith le plé gairid ar an instealladh spleáchais agus a buntáistí agus míbhuntáistí tá sé seo chomh maith le treoir mear-tús le cur chun feidhme an Spleáchas Symfony Instealladh Coimeádán ... tá súil againn go bhfaca tú go bhfuil sé ionadh tapaidh agus éasca. Ó anseo beidh tú in ann tús a chur ag baint úsáide as instealladh spleáchas trí d'iarratas agus táimid chun úsáid a bhaint as go leor de na gnéithe casta (cé go gclúdaíonn an sampla simplí formhór mór na feidhmeanna go mbainfidh tú teastáil). Mar i gcónaí phointe mé leat chun an lámhleabhar le haghaidh tuilleadh eolais.

4 freagairtí ar "Quick Start Symfony DI (Instealladh Spleáchas) Teagaisc"

  1. Luadh [...] an post ar Twitter ag Vincent Jousse, Steven Lloyd Watkin. Steven Lloyd Watkin dúirt: http://bit.ly/cUO2ov tús Thapa do # instealladh creat spleáchas symfony php # # zf [...]

  2. Hari KT a deir:

    Great article.
    Tá mé in amhras anois. Nuair a bootstrapping táimid ag luchtú an chomhaid cumraíochta yaml. Mar sin, níl a chruthú le cuspóirí ar fad, rud nach bhfuil ag teastáil uainn?
    Mar shampla: Tá mé Rud rang a úsáidtear ach uaireanta. Mar sin, ní chruthaíonn sé rud nó go bhfuil sé cliste go leor a luchtú trí autoload feidhmeanna a bhím ag glaoch getInstance () modh. Níor éirigh mé sin, is é sin an fáth.

    Go raibh maith agat

  3. Níl, tá ranganna luchtaithe ach amháin nuair is gá de chéad uair.

    Sa getInstance () mar shampla, go bhfuil an rang instantiated cosúil le:
    $ Aicme = Rang:: getInstance ();
    In áit a bheith:
    $ Rang = Rang nua ();
    Go ginearálta, is é seo a úsáid nuair atá cur chun feidhme an patrún Singleton.

  4. [...] Ligean ar cíos a úsáideann tú DI i do thionscadal ar bhealach éasca. Steven Lloyd Watkin chuid ama a chaitheamh ar scríobh s tutorial.It tús mear 'fiú a lua go bhfuil Symfony D Coimeádán leabharlann standalone ar fáil mar [...] Symfony

Leave a Reply













Lánléargas Téama Themocracy

7 cuairteoirí ar líne anois
5 aíonna, 2 bots, 0 baill
Tá 10 ag 03:01 UTC: Max cuairteoirí an lae inniu
An mhí seo: 26 ag 2011/07/05 12:35 UTC
I mbliana: 130 ag 28-03-2011 22:40 UTC
Gach uair: 130 ag 28-03-2011 22:40 UTC