Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] problem z dziedziczeniem?
Forum PHP.pl > Forum > PHP > Frameworki
bfcior
Witam, mam dość nietypowy problem.

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);
     }
}

?>


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();
       }
   }
   ?>

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)


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);
      }
   ?>

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
AxZx
w katalogu application/libraries utwórz plik MY_Controller.php
a w nim

  1. <?php
  2. class Controller extends Controller_Core {
  3.    function __construct(){
  4.        
  5.        parent::__construct();
  6. }
  7. }
  8. ?>


w tej klasie tez dopisz swoja metodę, której chcesz używać w kontrolerach.
bfcior
Przecież tak zrobiłem. Jest to jasno i wyraźnie opisane smile.gif

Można usunąć post, moje maluuuuuuuuuuuuuuuczkie niedopatrzenie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.