[TYPO3-ect] Controller Architecture Problem
Michael Knoll
mimi at kaktusteam.de
Thu Oct 4 00:07:32 CEST 2007
... ooops - read first - write later...
sorry, I just discovered, that there are those two functions mentioned
in my second proposal.
But for me, there is still the problem, that I can't "stopp" running the
controller at this point. Should I do something like change the action
and implement a "notLoggedInStopControllerAction" - function, which is
called, if no log in is available?
Sorry, for posting so much on nothing... shame on me...
'll go to bed now and work on tomorrow...
Mimi
Michael Knoll wrote:
> Hi list,
>
> after playing around with the functionality of lib/div, I have the
> following problem with the controller class, which I'm not sure how to
> cope with the best way.
>
> I would like to extend the controller to do some login-status-check for
> me, which I want to do with a configuration given in TS.
>
> What I would like to do, is extend the controller class
> (tx_lib_controller) and overwrite the main method, so that it first does
> my status-check and then runs the "standard" controller function. Now my
> problem is the fact, that all the setting up of context (like finding
> out which action to handle, setting up the parameters in the controller
> object and so on) is put in the main function. So for me, there is only
> the possibility to overwrite the whole main function and put my code "in
> the middle" of it.
>
> This is not very beautiful, as every change in the main function of
> tx_lib_controller takes the effect of me changing my function again.
>
> Wouldn't it better to split the main function into two different
> functions, one to set up the context and one to "run the action". With
> this design, one could easily extend the controller class and run
> "post-context-setting" - "pre-action-running" stuff like my login check.
>
> I would suggest a splitting of the functions like the following example:
>
> function main(...) {
> $this->setContext(...);
> return $this->runAction(...);
> }
>
> So the extended class could have a main function like this:
>
> function main(...) {
> $this->setContext(...);
> doSomeClassSpecificStuff(...);
> return $this->runAction(...);
> }
>
> There is still some code to be written twice, but not as much as in the
> architecture of the code, as it's implemented at the moment.
>
> The problem will effect any application that needs a context to be set
> but needs some application-specific changes in the controller before the
> action is handled.
>
> Another possibility would be to use a template pattern here, that let's
> you add some hook functions in the initialization of the controller, like:
>
> function main(...) {
> $this->doBeforeContextSetting(...);
> doContextSettingStuff...
> $this->doBeforeRunningAction(....);
> return $this->runAction(...);
> }
>
> /* To be overwritten in extending classes */
> function doBeforeContextSetting(...) {
> return true;
> }
>
> /* To be overwritten in extending classes */
> function doBeforeRunningAction(...) {
> return true;
> }
>
> with template methods to be overwritten in the extending controller
> classes. But that offers you no possibilty to return from the
> controller's main function depending on what happens in the template
> functions.
>
> At the moment I think it's not very elegant to extend the controller and
> get the context-setting-stuff done before you insert your own
> functionality.
>
> What do you think about?
>
> Regards
>
> Mimi
More information about the TYPO3-team-extension-coordination
mailing list