Μια ελληνική έκδοση αυτού του topic: http://www.yiiframework.com/forum/index.php?/topic/23188-dynamic-redirection/
Μιας και κανείς άλλος δεν είχε καμία ιδέα πάνω στο θέμα…
Λοιπόν το ζητούμενο είναι να μην γνωρίζεις από πριν που θα γίνει redirect ένα action αλλά αυτό να καθορίζεται με μια παράμετρο.
Βέβαια θα πει κανείς, ότι από κάπου θα πρέπει να αρχίσεις. Δεν είναι δυνατόν το σύστημα να είναι τόσο δυναμικό. Σωστό και αυτό.
Πιο συγκεκριμένα έχω έναν controller που έχει το ρόλο του ευρετηρίου.
Το ευρετήριο χρησιμοποιεί διάφορους τρόπους αλλά πάντα καταλήγει στο ίδιο πράγμα: Να μας δίνει το id ενός ActiveRecord
Όπως καταλαβαίνετε υπάρχουν πολλοί άλλοι controllers που αξιοποιούν το ευρετήριο.
Έτσι το ευρετήριο θα πρέπει να έχει όντως ένα δυναμικό redirection. Δηλαδή στο τέλος να επιστρέφει, να κάνει redirect, εκεί όπου του έχει ζητήσει κάποιος άλλος (controller)
Ο τρόπος που το μοντελοποίησα αυτό ήταν να εφαρμόσω καταρχήν μια παράμετρο parameters στα διάφορα Actions.
Έτσι το params είναι ένα array. Άρα σε μια αλληλουχία κάποιων actions. Action0 -> Action1 -> Action2 το κάθε action
μπορεί να κάνει append κάποιες μεταβλητές όσο προχωράει η διαδικασία.
Διότι όπως είπαμε το δυναμικό redirection το θέλουμε κατά βάση στο τέλος. Δηλαδή να έχει δωθεί η παράμετρος στο Action0 και αυτή να διαιωνιστεί ως το Action2 ώστε μετά το Action2 να πάμε (δυναμικά) κάπου αλλού.
Σημειώστε πως όχι δεν χρησιμοποίησα τα filters του Yii. Η υλοποίηση αυτή ίσως να βοηθούμε αλλά το ερώτημα ως μοντελοποίηση παραμένει το ίδιο.
Σημειώστε πως επίσης δεν λειτούργησα με session variables, αν και ίσως να χρειάζεται τελικά.
Διαισθητικά δεν πιστεύω δυστυχώς πως η λύση μου είναι βιώσιμη. Έχετε καμία άλλη ιδέα ή γνωρίζετε άλλους τρόπους αντιμετώπισης του θέματος πιο κομψά?
Αν έγινα κατανοητός με τα παραπάνω να προσθέσω και αυτό: Φανταστείτε πως όταν ένα action ζητάει μια πληροφορία από έναν controller (π.χ. το ευρετήριο) και γίνεται μια ξεχωριστή ακολουθία από actions για να έχουμε αυτή την πληροφορία, μπορεί και το ίδιο το ευρετήριο να ζητάει μια πληροφορία από έναν ΑΛΛΟ controller!!
Αρχίζει δηλαδή να γίνεται αρκετά εμφωλευμένη η κατάσταση.
Οποιαδήποτε ιδέα είναι ευπρόσδεκτη. Τώρα που είναι στο νεαρό της ηλικίας του σχετικά το project και μπορεί να σωθεί κάνοντας refactor τον κώδικα.
Ευχαριστώ πολύ!