25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.7KB

  1. <?php
  2. namespace Framework\Provider;
  3. use Framework\App;
  4. use Framework\View\Manager;
  5. use Framework\View\Engine\BasicEngine;
  6. use Framework\View\Engine\AdvancedEngine;
  7. use Framework\View\Engine\PhpEngine;
  8. use Framework\View\Engine\LiteralEngine;
  9. class ViewProvider
  10. {
  11. public function bind(App $app): void
  12. {
  13. $app->bind('view', function($app) {
  14. $manager = new Manager();
  15. $this->bindPaths($app, $manager);
  16. $this->bindMacros($app, $manager);
  17. $this->bindEngines($app, $manager);
  18. return $manager;
  19. });
  20. }
  21. private function bindPaths(App $app, Manager $manager): void
  22. {
  23. $manager->addPath($app->resolve('paths.base') . '/resources/views');
  24. $manager->addPath($app->resolve('paths.base') . '/resources/images');
  25. }
  26. private function bindMacros(App $app, Manager $manager): void
  27. {
  28. $manager->addMacro('escape', fn($value) => htmlspecialchars($value, ENT_QUOTES));
  29. $manager->addMacro('includes', fn(...$params) => print view(...$params));
  30. }
  31. private function bindEngines(App $app, Manager $manager): void
  32. {
  33. $app->bind('view.engine.basic', fn() => new BasicEngine());
  34. $app->bind('view.engine.advanced', fn() => new AdvancedEngine());
  35. $app->bind('view.engine.php', fn() => new PhpEngine());
  36. $app->bind('view.engine.literal', fn() => new LiteralEngine());
  37. $manager->addEngine('basic.php', $app->resolve('view.engine.basic'));
  38. $manager->addEngine('advanced.php', $app->resolve('view.engine.advanced'));
  39. $manager->addEngine('php', $app->resolve('view.engine.php'));
  40. $manager->addEngine('svg', $app->resolve('view.engine.literal'));
  41. }
  42. }

Powered by TurnKey Linux.