Controller in controller?
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.
Kun je een concreet voorbeeldje geven?
Dat is echt een vrij afgrijselijke frontcontroller, waar je niet echt veel aan hebt...
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.
- 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 -
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
)
)
}
}
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
)
)
}
}
Niels Kieviet op 07/02/2011 19:09:40:
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 ;-))
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 ;-)
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)
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
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);
}
}
?>
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 -
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?
(...)
Waarom zou een controller de frontcontroller uit moeten breiden? Dat zijn toch hele andere taken?
(...)
Kijk... Daar heb ik ook alweer overheen gelezen.