Controller in controller?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels Vanderheyden

Niels Vanderheyden

07/02/2011 15:18:30
Quote Anchor link
Ik heb dit frontcontroller script gebruikt voor rond mijn mvc scripts.
http://www.pfz.nl/wiki/frontcontroller/

Het handige is dat hij via de url de juist controller opvraagt maar op sommige momenten wil ik 2 controllers opvragen.
Is het dan een juist manier dat ik hier een hoofd controller van maak en deze 2 controller in de hoofdcontroller oproep?

Of hoe kan ik dit oplossen?
Alvast bedankt.
 
PHP hulp

PHP hulp

04/05/2024 05:44:35
 
Ozzie PHP

Ozzie PHP

07/02/2011 16:01:09
Quote Anchor link
Wat bedoel je met "Het handige is dat hij via de url de juist controller opvraagt maar op sommige momenten wil ik 2 controllers opvragen."

Kun je een concreet voorbeeldje geven?
 
Pim -

Pim -

07/02/2011 16:09:51
Quote Anchor link
Dat is echt een vrij afgrijselijke frontcontroller, waar je niet echt veel aan hebt...
 

07/02/2011 17:48:16
Quote Anchor link
Pim - op 07/02/2011 16:09:51:
Dat is echt een vrij afgrijselijke frontcontroller, waar je niet echt veel aan hebt...


Leg eens uit waarom.
 
Pim -

Pim -

07/02/2011 17:57:23
Quote Anchor link
- De FC mist elke vorm van abstractie en modulariteit, waardoor hij op een veel te beperkte manier gebruikt kan worden.
- dispatch() wordt door de constructor aangeroepen
- Parameters kunnen niet worden gebruikt door de controller. (Wel via query parameters, maar die probeer je juist niet te gebruiken)
- Prettige foutafhandeling. Niet eens een 404 header

EDIT: Hoezo moet dat uitgelegd worden eigenlijk? ;)
Gewijzigd op 07/02/2011 18:31:46 door Pim -
 
Niels K

Niels K

07/02/2011 19:09:40
Quote Anchor link
Quote:
Hoezo moet dat uitgelegd worden eigenlijk? ;)

Karl is pro in 'normaal' PHP maar volgens mij op het OO gebied nog niet bijzonder pro, of heb ik dat mis karl? (niet lullig bedoeld overigens hoor ;-))

@Niels

Je wilt een soort 'BaseController' ? Of begrijp ik je nu weer verkeerd?

Wil je dat wel dan is het toch heel simpel?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

class BaseController extends FrontController {
    
    protected $db;
    public function __construct() {
        $this->db = '...';
    }
}


class IndexController extends BaseController {
    public function __construct() {
        parent::__construct();
    }


    public function foo() {
        $this->db->startTransaction(
            $this->db->select(
                // Weet ik vuul wat nog meer
            )
        )
    }
}
 

07/02/2011 19:13:57
Quote Anchor link
Niels Kieviet op 07/02/2011 19:09:40:
Quote:
Hoezo moet dat uitgelegd worden eigenlijk? ;)

Karl is pro in 'normaal' PHP maar volgens mij op het OO gebied nog niet bijzonder pro, of heb ik dat mis karl? (niet lullig bedoeld overigens hoor ;-))


Dat valt wel mee.
Had het alleen heel snel doorgekeken, omdat ik met wat anders bezig was dus was wel benieuwd. Zag namelijk wel bekende onderdelen ;-)
 
Pim -

Pim -

07/02/2011 20:02:31
Quote Anchor link
Niels toch...
Waarom zou een controller de frontcontroller uit moeten breiden? Dat zijn toch hele andere taken?

Ik denk dat de TS iets als dit bedoelt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class FrontController {
    public function route($query) {

        // Routing

        return $this->dispatch($controller, $action, $params);
    }


    public function disptach($controller, $action, $params = array()) {
        $c = new $controller($this);

        // Gebruik de parameters als argumenten bij de action
        return call_user_func_array(array($c, $action), $params);

        // Checks buiten beschouwing gelaten
    }
}


abstract class Controller {
    protected $frontController;

    public function __construct(FrontController $fc) {
        $this->frontController = $fc;
    }


    protected function _callSubController($controller, $action, $params = array()) {
        return $this->frontController->dispatch($controller, $action, $params);
    }
}

?>
Gewijzigd op 07/02/2011 20:04:41 door Pim -
 

07/02/2011 20:05:04
Quote Anchor link
Pim - op 07/02/2011 20:02:31:
Niels toch...
Waarom zou een controller de frontcontroller uit moeten breiden? Dat zijn toch hele andere taken?
(...)


Kijk... Daar heb ik ook alweer overheen gelezen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.