Plik obcięty ze zbędnych tagów. Przedstawia definicję akcji i ich podstawowe relacje.
actions.xml
<index> <subactions> <showCategory /> <showNews /> </subactions> </index> <showNews></showNews> <showCategory></showCategory>
Załóżmy, że wywołujemy żądanie o postaci index.php?action=index
Parser czytając ten plik XML odczyta subakcję i stworzy ciąg akcji do uruchomienia w postaci
showCategory
showNews
index
W przedstawionej kolejności zostaną te akcje wykonane. (np metodą execute())
Gdzie problem? Ano. np, index.php?action=index&id=3
Intencją programisty jest, że $id odnosi się do akcji showCategory, która na jej podstawie wybiera kategorię z bazy danych.
Niech teraz akcja showNews również wymaga przekazania jakichś argumentów, np. $category oraz $id. Nie może po prostu odczytać $id, bo ten jest pobierany przez inną akcję i może nie zawierać tego, co chcemy, a nawet na pewno nie zawiera.
Ktoś może powiedzieć, że w takim razie najlepiej stworzyć łańcuch
index.php?action=index?categoryId=7&newsId=5
Od razu odpowiem, że takie rozwiązanie jest kalekie, i w ogóle nie wchodzi w grę, bo związuje akcję z konkretną nazwą klucza, którą potem trzeba wszędzie powtarzać.
Ktoś inny może podsunąć pomysł ustawiania parametrów żądania przez poprzednią akcję. Owszem. Wiele frameworków robi to i czasami również zaleca uruchomienie, bądź wręcz uruchamia kolejna akcję. Można wówczas taki bajer zrobić
W ciele akcji showCatagory
<?php setNextActionParams("1", "kolejny", "etc"); // albo jakoś inaczej, to nieistotne ?>
Co jednak, jeśli te akcje mogą zostać uruchomione w różnych kontekstach?
np. Stwórzmy nową akcję.
<showMostPopularCategory> <subactions> <showCategory /> </subactions> </showMostPopularCategory>
Jak widać, uruchomienie index?action=showMostPopularCategory również wykona akcję showCategory. Niniejszym jakakolwiek ingerencja w parametry akcji showNews nie ma sensu, bo tej akcji nie ma w łańcuchu.
Podobnie rzecz się będzie miała z innymi akcjami, a dochodzą jeszcze nieograniczone wręcz możliwości kombinowania układów akcji.
Rodzi się konkretne pytanie - w jaki sposób przekazać w takim układzie parametry żądania? Akcja nie ma pojęcia, w jakim kontekście jest uruchamiana, wiec musi liczyć na to, coś ustawi to za nią, albo sama musi znaleźć te parametry... : \
Jeśli ktoś spotkał się z podobnym problemem, to będę wdzięczny za podzielenie się przemyśleniami oraz posiadanymi linkami do artów itp.
Dzięki wszystkim, którzy w ogóle dobrnęli do końca tego posta
Pozdrawiam.