Volání metody modelu z jiného modelu
- miler
- Člen | 75
Ahoj. Mám podle cca půl roku starého QS modely které více méně odpovídají tabulkám databáze. Problém který teď vyvstal je ale v tom že mám strukturu sport-klub-tým, kde mám v modelu klub metodu která provádí nějaké akce pro daný klub. A teď bych chtěl v metodě modelu sport, která edituje vlastnost sportu, zavolat pro všechny kluby v něm tu metodu z modelu klubu. Je to asi špatně, ale jak z toho ven? Ta metoda je celkem obsáhlá a mít ji v obou modelech je asi ještě víc špatně. Dík
- Šaman
- Člen | 2666
Nastuduj si 5 vrstev modelu, tebe bude asi zajímat fasáda. Tam patří operace nad celým modelem, které nespadají pod jednotlivé repozitáře.
Edit: v téhle přednášce se fasáda jmenuje servisní vrstva.
Editoval Šaman (20. 2. 2013 3:55)
- Filip Procházka
- Moderator | 4668
Já ti to shrnu: prostě udělej novou třídu, třeba
SportKlubTymMiseNaMars
, do ní předej všechno co bude potřebovat
(třídu Sport
, třídu Klub
a třídu
Tým
– a nebo třeba jen samotné připojení do databáze –
jak ti to vyhovuje), napiš ji do services
sekce v neonu a pak ji
použij v presenteru.
- miler
- Člen | 75
Aha diky. Takže když v presenteru po zpracování editačního formuláře pro sport:
- volám model sportu
- pokud se změnily jen údaje jako třeba popisek sportu tak to rovnou upravuji
- pokud se změnil status sportu (třeba na vyřazený ze seznamu akceptovaných disciplín) tak chci volat všechny kluby a nastavit jim taky status vyřazený. To mám už hotové v modelu pro klub, protože ta metoda jde volat i samostatně pro jeden klub.
To tedy znamená že celé ty úpravy mám přesunout až do té nové společné třídy? Omlouvám se že se ptám asi jako blb, ale rád bych to pochopil správně :-)
Aha, takže tam přesunu jen tu rozhodovací logiku (typ úpravové akce) a pak si tam zavolám co chci, je to tak?
Editoval miler (20. 2. 2013 17:22)
- Stic
- Člen | 28
Filip Procházka napsal(a):
Já ti to shrnu: prostě udělej novou třídu, třeba
SportKlubTymMiseNaMars
, do ní předej všechno co bude potřebovat (tříduSport
, tříduKlub
a tříduTým
– a nebo třeba jen samotné připojení do databáze – jak ti to vyhovuje), napiš ji doservices
sekce v neonu a pak ji použij v presenteru.
Zdravim,
Riesim uplne rovnaky problem ako kolega na zaciatku, a toto riesenie by ma teda nenapadlo. Kazdopadne mi to pride take akesi neohrabane…v konfigu sa mi zacinaju mnozit len same riadky kde nastavujem nove sluzby z repozitarov. mam 9 tabuliek, a pre kazdu mam zvlast repozitar + zakladny Repository – podobne ako je to v QuickStarte.
Okrem toho mam este 4 authenticatory – password, facebook, twitter, a google+, takze v config.neon som skoncil s touto hromadou neprehladnych riadkov :)
<?php
services:
routerFactory: RouterFactory
router: @routerFactory::createRouter
authenticator: PasswordAuthenticator
userRepository: UserRepository
reliabilityHistoryRepository: ReliabilityHistoryRepository
screenTestResultsRepository: ScreenTestResultsRepository
screenTestMetaRepository: ScreenTestMetaRepository
videoTestResultsRepository: VideoTestResultsRepository
videoTestMetaRepository: VideoTestMetaRepository
facebook: Facebook( {appId: %facebook.appId%, secret: %facebook.secret%} )
facebookAuthenticator: FacebookAuthenticator
facebookInfoRepository: FacebookInfoRepository
twitter: TwitterOAuth( %twitter.consumerKey%, %twitter.consumerSecret% )
twitterAuthenticator: TwitterAuthenticator
twitterInfoRepository: TwitterInfoRepository
google: Google_Client([oauth2_client_id: %google.id%, oauth2_client_secret: %google.secret%, developer_key: %google.key%])
googleAuthenticator: GoogleAuthenticator
googleInfoRepository: GoogleInfoRepository
factories:
?>
Ak teda potrebujem dalsiu triedu v ktorej si zavolam uz 3 definovane sluzby, tak ju zase musim pridat do configu?
Neexistuje nejake elegantnejsie riesenie?
Dakujem
- Filip Procházka
- Moderator | 4668
Co třeba tenhle addon?
Ale obecně – imho je to perfektně přehledné, proč si myslíš opak? Já mám takhle v configu stovky služeb. Myslím to smrtelně vážně – stovky! A funguje to co? Perfektně!
Pokud to ovšem nejsi schopný vstřebat (ze začátku je to fakt drsný), tak doporučuji config rozdělit na logické celky a všechny je includnout do hlavního configu, nebo je načíst pomocí Configurator::addConfig
- Filip Procházka
- Moderator | 4668
Jen bych pro příště poprosil – založte nové téma kluci. Je daleko lepší mít 1000 krátkých vláken, než 10 nepřehledných. Díky :)