Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pytanie o autoloader Twig np w Symfony, OOP
kayman
post 19.09.2014, 11:39:32
Post #1





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


  1.  
  2. namespace Framework;
  3.  
  4.  
  5. require_once 'Framework/Twig/Autoloader.php';
  6.  
  7. class View {
  8.  
  9. private $data = array();
  10. private $file = 'default.html';
  11. private $subpath = '';
  12. private $cache = false;
  13.  
  14. public function addData($key, $value) {
  15. $this->data[$key] = $value;
  16. }
  17.  
  18. public function setFile($file) {
  19. $this->file = $file;
  20. }
  21.  
  22. public function setSubPath($path) {
  23. $this->subpath = '/' . $path;
  24. }
  25.  
  26. function setCache($val) {
  27. if ($val)
  28. $this->cache = true;
  29. }
  30.  
  31. public function showPage() {
  32.  
  33. // usuniecie domyslego autoloadera calej aplikacji !!questionmark.gif
  34.  
  35. $functions = spl_autoload_functions();
  36. foreach ($functions as $function) {
  37. spl_autoload_unregister($function);
  38. }
  39. //--------------------------------------------
  40.  
  41. \Twig_Autoloader::register();
  42.  
  43. $loader = new \Twig_Loader_Filesystem('Templates' . $this->subpath);
  44. if ($this->cache)
  45. $twig = new \Twig_Environment($loader, array(
  46. 'cache' => 'Templates/Cache',
  47. ));
  48. else
  49. $twig = new \Twig_Environment($loader);
  50. echo $twig->render($this->file, $this->data);
  51. }
  52.  
  53. }
  54.  
  55.  



jest to widok w własnej aplikacji, z powodu, że bardzo dobrze pracuje mi sie z Twig zastosowałem ten system szablonów ale żeby nie było konfliktu musiałem pozbyć się domyślnego autoloadera aplikacji (widać w funkcji showPage()) co wygląda dość dziwnie

czy ktoś mógłby mi pokazać lub nakierować jak ten problem rozwiązuje Symfony lub inny framework
Go to the top of the page
+Quote Post
Pyton_000
post 19.09.2014, 11:49:13
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Znaczy że co? Przed wywaleniem swojego autoloadera coś sypało ? Jakieś błędy?
Pokaż swój autoloader
Go to the top of the page
+Quote Post
kayman
post 19.09.2014, 11:52:11
Post #3





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


gryzło się, pliki Twig nie były znajdowane

  1.  
  2. function autoload($class) {
  3. $paths = explode(PATH_SEPARATOR, get_include_path());
  4. $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE;
  5. $file = strtolower(str_replace('\\', DIRECTORY_SEPARATOR, trim($class, '\\'))) . '.php';
  6. foreach ($paths as $path) {
  7. $combined = $path . DIRECTORY_SEPARATOR . $file;
  8. if (file_exists($combined)) {
  9. include $combined;
  10. return;
  11. }
  12. die('Nie znaleziono klasy ' . $class);
  13. }
  14. }
  15.  
  16. class Autoloader {
  17.  
  18. public static function autoload($class) {
  19. autoload($class);
  20. }
  21.  
  22. }
  23.  
  24. spl_autoload_register('autoload');
  25. spl_autoload_register(array('Autoloader', 'autoload'));
  26.  
Go to the top of the page
+Quote Post
Pyton_000
post 19.09.2014, 11:53:28
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


masz taką samą nazwę jak twog czyli "autoload" zmień to na coś innego i zadziała smile.gif
Go to the top of the page
+Quote Post
kayman
post 19.09.2014, 11:57:40
Post #5





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


o masz o najprostszym rozwiązaniu nie pomyślałem smile.gif

e: niestety gryzą się -> to jest var_dump z funkcji spl_autoload_functions()

-> array(3) { [0]=> string(13) "classAutoload" [1]=> array(2) { [0]=> string(15) "ClassAutoloader" [1]=> string(13) "classAutoload" } [2]=> array(2) { [0]=> string(15) "Twig_Autoloader" [1]=> string(8) "autoload" } }

wygląda na to że ten pierwszy stara się wczytać pliki Twiga

Ten post edytował kayman 19.09.2014, 12:34:34
Go to the top of the page
+Quote Post
pyro
post 19.09.2014, 21:38:07
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Po pierwsze opakowałeś gotową funkcję autoloadującą w klasę, co jest zupełnie bez sensu, więc się tego pozbądź

Po drugie kod tego loadera też jest kompletnie bez sensu i błędny. Robisz foreach, a autoloader i tak sprawdzi max 1 ścieżkę. Popatrz na kod i domyśl się czemu. Po drugie w jaki sposób PHP ma przejść do drugiego zarejestrowanego autoloadera, skoro w tym pierwszym dajesz die(); ?


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Pyton_000
post 20.09.2014, 06:50:37
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Hmmm dopiero mój umysł ogarnął co się dzieje w tym kodzie.

Wywal tą klasę i 2 register, wywal die() z autoloadera.
I jakie błędy sypie?
Go to the top of the page
+Quote Post
kayman
post 21.09.2014, 18:11:55
Post #8





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


dzięki panowie za podpowiedzi, przepisałem jak się należy i działa
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: 27.04.2024 - 08:21