Slots symfoni

Vi anbefaler a oppgradere til nyeste Safari, Google Chrome eller Firefox.

Trekk foresporsler 0.

Bli med GitHub i dag.

GitHub er hjem for over 20 millioner utviklere som arbeider sammen for a verts- og gjennomgangskode, administrere prosjekter og bygge programvare sammen.

Klon med HTTPS.

Bruk Git eller kassen med SVN ved hjelp av webadressen.

Dette biblioteket er inspirert av Qt «Signals and slots» -mekanismen, sa det er ganske likt.

Signal er noe som forteller ytre verden om den indre tilstanden til et objekt. For eksempel: telefoner kan ringe, katter kan meow etc. Ringer og meows er signaler. De forteller oss om endring i deres interne tilstander.

Du kan reagere pa de signalene pa en eller annen mate. For eksempel: Svar pa anropet eller mate katten. Dine reaksjoner er spor.

Det er de samme situasjonene i programmering: noen ganger ma vi reagere pa noen endringer i objektets tilstand. Og det er dette biblioteket for: det gjor kommunikasjonen mellom objekter lettere. Enda enklere enn det kan v re med «Observer» -monster.

eller legg til avhengighet til komponisten.json-filen din.

Hvis du vil at objektet ditt vil kunne sende ut signaler, ma du implementere SignalInterface og bruke SignalTrait. For eksempel har du noen logger klasse og du vil sende signal noeIsLogged nar logger ferdig arbeid:

For a sende ut signal ma du ringe sende metode og sende signalnavn og data. Du kan passere hva du vil: array, streng, objekt eller nummer. Det er alt. Na sender loggeren din signal til ytre verden. Men ingen er koblet til dette signalet enna. La oss gjore dette.

Slot Det er en vanlig klassemetode. La oss definere en klasse med et spor.

For na har vi Logger klasse som sender signal og mottaker klasse med et spor. For a reagere pa signal med spor ma du koble dem til hverandre. La oss gjore det.

Siden du ringte ConnectionManager :: koble til (SignalInterface $ sender, $ signalName, $ receiver, $ slotName); Metodesignal og spor er koblet til. Det betyr at etter logg $ logger-> logg () vil noeIsLogged-signalet bli sendt ut og slotReactOnSignal-sporet blir kalt. Resultatet vil bli «Mottatt data: Noen nyttige data». Du kan koble sa mange spor til signaler som du vil. Faktisk kan du opprette forbindelser som:

Ett signal til ett spor Ett signal til mange spor Mange signaler til mange spor Mange signaler til ett spor.

Du kan ogsa opprette flere tilkoblinger ved a ringe ConnectionManager :: initConnections (array $ connections); metode:

Som standard ConnectionManager :: connect () -metoden opprettes permanente forbindelser. Det betyr at sporet ikke vil bli koblet fra signal etter forste utslipp. Men du kan lage engangsforbindelse. Bare pass 5. parameter til ConnectionManager :: connect () metode som ConnectionManager :: CONNECTION_ONE_TIME. For eksempel:

Etter andre anrop av Logger :: log () vil ingenting skje fordi spor vil bli koblet fra signal etter forste utslipp.

Siden du kan koble forskjellige mottakere med forskjellige spor til en avsender og signal ConnectionManager kaller tilkoblede spor i en spesiell rekkefolge – ved tilkoblingsvekter. Lavere vekt har hoyere prioritet. Tilkoblingsvekter pavirker rekkefolgen pa spor fra alle mottakere, men ikke pa rekkefolge av spor i en mottaker.

Som standard ConnectionManager :: connect () -metoden opprettes permanente forbindelser med nullvekt. Men du kan endre den ved a sende 6. parameter til ConnectionManager :: connect () -metoden. For eksempel:

Hvis du ikke vil hore signalet, ma du bare koble fra det.

Du kan ogsa koble tilkoblinger etter forhold:

Koble alle mottakere fra alle signaler til en bestemt sender.

Koble alle mottakere fra et gitt signal fra en bestemt sender.

Koble alle spor fra en gitt mottaker fra et gitt signal fra en bestemt sender.

Hvis du vil tilbakestille alle eksisterende tilkoblinger, ring.

Hvis du bruker Symfony Dependency Injection-komponenten, kan du kanskje ikke lage objekter manuelt, men hent dem fra servicebeholderen i stedet. For slike tilfeller kan du koble til tjenestene dine definert i services.yml-filen uten a opprette manuelle objekt. Slik kan du oppna dette:

La oss si at du har services.yml-fil med folgende tjenester:

For a koble til en \ mottaker slotsporreaktivering til et \ logger-signal noeIslogg opprett en yaml-fil et sted (la oss si services.connections.yml) i prosjektet med neste innhold:

Initialiser serviceforbindelser:

Na er yor \ Logger-tjenesten klar til a sende ut signaler og \ Mottakerservice er klar til a reagere pa signaler:

Vennligst se tester for mer informasjon og brukstilfeller.

For a kjore tester type:

Jeg liker Qts signal- og spilleautomat og onsker a bringe den inn i PHP verden.

Det er lett. Avhenger bare av en tredjepartsbibliotek: symfony / yaml.

GPLv3. Se LISENS-fil.

&kopiere; 2018 GitHub, Inc. Vilkar Personvern Sikkerhetsstatus Hjelp.

Du kan ikke utfore denne handlingen pa dette tidspunktet.

Du logget pa med en annen fane eller et vindu. Oppdater for a oppdatere okten din. Du logget ut i en annen kategori eller et vindu. Oppdater for a oppdatere okten din.