Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie o autoloader Twig np w Symfony
Forum PHP.pl > Forum > PHP
kayman
  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
Pyton_000
Znaczy że co? Przed wywaleniem swojego autoloadera coś sypało ? Jakieś błędy?
Pokaż swój autoloader
kayman
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.  
Pyton_000
masz taką samą nazwę jak twog czyli "autoload" zmień to na coś innego i zadziała smile.gif
kayman
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
pyro
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(); ?
Pyton_000
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?
kayman
dzięki panowie za podpowiedzi, przepisałem jak się należy i działa
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.