Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana] problem z dziedziczeniem?
bfcior
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.11.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował bfcior 8.01.2009, 23:32:27
Go to the top of the page
+Quote Post
AxZx
post
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
bfcior
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.11.2007

Ostrzeżenie: (0%)
-----


Przecież tak zrobiłem. Jest to jasno i wyraźnie opisane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Można usunąć post, moje maluuuuuuuuuuuuuuuczkie niedopatrzenie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował bfcior 26.01.2009, 23:24:27
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 06:34