Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Autoloader + namespace, błąd w dołączaniu plików
brzoza91
post 14.01.2013, 00:12:31
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 9.05.2012

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


Witam
Chciałbym używać w swojej aplikacji przestrzeni nazw, a także użyć autoloadera klas.
Na początku pokaże wam strukturę mojej aplikacji.


posiadam taki Autoloader
  1. <?php
  2. class Autoloader {
  3.  
  4. public static $loader;
  5.  
  6. public static function init()
  7. {
  8. if (self::$loader == NULL)
  9. self::$loader = new self();
  10.  
  11. return self::$loader;
  12. }
  13.  
  14. public function __construct()
  15. {
  16. spl_autoload_register(array($this,'controller'));
  17. }
  18.  
  19. public function controller($class)
  20. {
  21. var_dump($class);
  22. try{
  23. if(file_exists($class)){
  24. require_once($class);
  25. } else {
  26. throw new Exception('nie mozna dolaczyc pliku: ' .$class);
  27. }
  28. } catch (Exception $e){
  29. echo $e->getMessage();
  30. }
  31. }
  32.  
  33.  
  34. }


taki Controller
  1. namespace Framework\Core\Controller;
  2.  
  3. require_once('libs/yaml/Yaml.php');
  4. require_once('View.php');
  5. abstract class Controller
  6. {
  7. protected $pdo;
  8. protected $view;
  9. public function __construct()
  10. {
  11. try
  12. {
  13. $file='c:/wamp/www/framework/core/parameters/parameters.yml';
  14. $database= Yaml::parse($file);
  15. $database=(object)$database['database'];
  16.  
  17. $this->pdo= new PDO($database->type.':host='.$database->host.';dbname='.$database->dbname, $database->user, $database->password);
  18. $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  19. } catch(DBException $e)
  20. {
  21. echo 'The connect can not create with database<br>'. $e->getMessage();
  22. }
  23.  
  24. $this->view= new View();
  25. }
  26. abstract public function indexAction();
  27.  
  28. }
  29.  


i taki IndexContoller
  1. namespace App\Contollers\IndexContoller;
  2.  
  3. use Framework\Core\Controller as Contoller;
  4.  
  5. class IndexController extends Controller {
  6.  
  7. function __construct() {
  8. parent::__construct();
  9. }
  10.  
  11. public function indexAction() {
  12.  
  13.  
  14. }
  15. public function showAction($arg=false){
  16. $this->view->render('Index::show');
  17. }
  18.  
  19. public function addAction()
  20. {
  21. echo "addAction</br>";
  22. }
  23.  
  24. }


po wpisaniu adresu w przeglądarce który powinien uruchomić metodę show z IndexContoller otrzymuje taki komunikat:

  1. string 'App\Contollers\IndexContoller\Controller' (length=40)
  2. nie mozna dolaczyc pliku: App\Contollers\IndexContoller\Controller


co robię nie tak, coś nie mogę zrozumieć tych namespace, bo Autoloader bez użycia namespace implementuje poprawnie
Go to the top of the page
+Quote Post
piotr.pasich
post 14.01.2013, 09:09:23
Post #2





Grupa: Zarejestrowani
Postów: 27
Pomógł: 4
Dołączył: 27.01.2012
Skąd: Gliwice

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


Rozumiem, że jest to rozpoczęcie projektowania własnego frameworka... nie wymyślaj koła na nowo! (koniec nawracania:) )

Ale rozwiązując problem z posta najlepiej albo przyjrzeć się gotowym już rozwiązaniom, albo je podpiąć - większość obecnych supportowanych frameworków swoje biblioteki ma dość odseparowane i istnieje możliwość ich podpięcia pod autorskie rozwiązania, np. :
http://symfony.com/doc/2.0/components/class_loader.html - jeżeli nie uda się zainstalować, to kod dostarczy przynajmniej pożądane rozwiązanie
http://framework.zend.com/manual/2.0/en/mo...autoloader.html - dosyć podobny do Symfony

pozdrawiam,
Piotr


--------------------
Zapraszam do głosowania na agendę PHPCon Poland 2013 http://www.phpcon.pl/2013/pl/agenda.

---
Piotr Pasich
piotr.pasich@xsolve.pl
www.xsolve.pl
Go to the top of the page
+Quote Post
memory
post 14.01.2013, 09:35:18
Post #3





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


Cytat
nie wymyślaj koła na nowo!

eh...

https://github.com/php-fig/fig-standards/bl...cepted/PSR-0.md

Tutaj jest przykładowa prawidłowa implementacja autloadera

Ten post edytował memory 14.01.2013, 09:35:42
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 20:12