Witam postanowiłem się pobawić troszkę w obiektowe pisanie w php. Efektem moich zabaw ma być malutki framework jeśli tak to można nazwać taki aby zobaczyć jak to działa ;)
Podejrzałem codeigniter i postanowiłem się na nim troszkę wzorować. Dobra przejdę do sedna sprawy.
- w index.php odpalam jądro ( Core.php ) w którym zawarta jest klasa Core.
- W konstruktorze klasy ładuję Router , klase do bledow i klase Controllera.
- Router bada adres itp itd.
- Wykonuje sie metoda z klasy Core pod nazwa execute a ona przekierowywuje nas do odpowiedniego pliku z controllerem itp
Takie proste działanie na początek. Teraz przykładowo adres jest example.com/profile/example/cos . Pierwszym parametrem jest tzw. set czyli zestaw w ktorym znajduja sie controllery. Ladujemy klase znajdujacą się w app/sets/profile/Example.php i idziemy do metody cos no i wszystko mi działa. Jednak klasa kontrolera Example dziedziczy po klasie Controller , oto jej kod.
<?php
class Controller {
private static $instance;
public $core;
public function __construct() {
self::$instance =& $this;
$this -> core = Core::getInstance();
$this -> load =& $this -> core -> load_class('Loader','core');
}
public static function &getInstance() {
return self::$instance;
}
}
?>
a teraz kod klasy Loader którą ładuje w Controller
<?php
class Loader {
protected $_classes = array();
public function library($library = '' , $params = null ) {
require_once LIB_PATH.'libraries/'.$library.'.class.php';
$c =& Controller::getInstance();
$c -> $library = new $library();
}
}
?>
Tak chciałbym mniej więcej żeby to działało żebym w controlerze Example mogl zaladowac sobie takim prostym sposobem biblioteke np do obslugi formularzy
class ExampleController extends Controller {
public function indexAction() {
echo 'Example Controller';
$this -> load -> library('Form');
$this -> Form -> zobacz();
}
}
Moje pytanie brzmi czy dobrym tropem idę ? Czy da się uprościć jakoś klase Controller , ktora potrzebuje dwa razy pobrania instancji , raz swojej a potem z klasy Core. Jesli nie pobierze swojej to mnóstwo błędow. Nie wiem czy dobrze pojmuje cala logike :)
Prosze o pomoc.