Stworzyłem sobie rozszerzenie głównego kontrolera Controller we własnej klasie MY_Controller.php która jest umieszczona tak jak to mówi dokumentacja application/libraries.
Klasa wygląda tak:
Kod
<?php
class Controller extends Controller_Core
{
protected $db;
public function __construct()
{
parent::__construct();
$this->db = Database::instance();
}
/*
* Prepare page content and show it on page
*/
public function prepare_page()
{
$view = new View('template');
$view->render(TRUE);
}
}
?>
class Controller extends Controller_Core
{
protected $db;
public function __construct()
{
parent::__construct();
$this->db = Database::instance();
}
/*
* Prepare page content and show it on page
*/
public function prepare_page()
{
$view = new View('template');
$view->render(TRUE);
}
}
?>
I teraz pytanie. po stworzeniu np. klasy main w folderze /controllers/main.php w pewnym momencie wywołuję metodę prepare_page();
Załóżmy, że klasa wygląda tylko tak (aby jak najprościej zademonstrować mój problem):
Kod
<?php defined('SYSPATH') or die('No direct script access.');
class Main_Controller extends Controller {
public function index() {
$this->prepare_page();
}
}
?>
class Main_Controller extends Controller {
public function index() {
$this->prepare_page();
}
}
?>
Wynikiem tego jest wyświetlenie się strony view/template.php.
I tak jest na trzech serverach, 2 windowsy i 1 openBSD. W czwartym, dystrybucyjnym (debian) jest problem, gdyż framework wyrzuca mi błąd że strona main nieistnieje. Jakby klasa main, nie potrafiła dziedziczyć. Co więcej..
Jeżeli przekopiuje z application/libraries/MY_Controller.php metodę prepare_page() do mojej klasy /controllers/main.php to wszystko działa jak należy. Nie mam pojęcia co się dzieję. Zaznaczę, że serwer ma najnowszą wersję php
Kod
wasyl@foch:~$ php --version
PHP 5.2.8-0.dotdeb.1 with Suhosin-Patch 0.9.6.3 (cli) (built: Dec 11 2008 22:57:19)
PHP 5.2.8-0.dotdeb.1 with Suhosin-Patch 0.9.6.3 (cli) (built: Dec 11 2008 22:57:19)
Czyli jeżeli klasa main wyglądać będzie jak poniżej, wszystko działa.
Kod
<?php defined('SYSPATH') or die('No direct script access.');
class Main_Controller extends Controller {
public function index() {
$this->prepare_page();
}
/*
* Prepare page content and show it on page
*/
public function prepare_page()
{
$view = new View('template');
$view->render(TRUE);
}
?>
class Main_Controller extends Controller {
public function index() {
$this->prepare_page();
}
/*
* Prepare page content and show it on page
*/
public function prepare_page()
{
$view = new View('template');
$view->render(TRUE);
}
?>
Nie chcę za każdym razem, przy tworzeniu nowej klasy umieszczać w niej prepare_page(), chce aby ta metoda byla w glownym kontrolerze i byla dziedziczona. HELP