public function initPlugin() { $this->app[$this->getPluginName()] = function ($app) { $paths = $app->config('templating.paths') ?: [$app['dir.root'] . '/module/' . $app['app.module'] . '/template/%name%']; $basePath = $app->config('templating.basePath') ?: $app->request()->getBasePath() . '/assets'; $loader = new FilesystemLoader($paths); $engine = new PhpEngine(new TemplateNameParser(), $loader); $engine->addGlobal('app', $app); $engine->set(new SlotsHelper()); $engine->set(new AssetsHelper($basePath)); $app->event()->emit('plugin.templating.after', [$app, $engine]); return $engine; }; }
/** * @param type $template Le template à afficher * @param array Les options à transmettre à la vue pour les utiliser * @return Response */ protected function render($template, array $options = array()) { $loader = new FilesystemLoader(__DIR__ . '/../view/%name%'); $templating = new PhpEngine(new TemplateNameParser(), $loader); $templating->set(new SlotsHelper()); $templating->set(new AssetsHelper('/')); $templating->set(new RouterHelper(new UrlGenerator($this->routes, $this->requestContext))); $templating->addGlobal('request', $this->request); //Marche bien $templating->addGlobal('session', $this->request->getSession()); $templating->addGlobal('user', $this->request->getSession() ? $this->request->getSession()->get('user') : null); $response = Response::create($templating->render($template, $options)); return $response; }
protected function render($name, array $args = array(), $status = '200') { $loader = new FilesystemLoader(__DIR__ . '/../../../../src/Resources/views/%name%'); $templating = new PhpEngine(new TemplateNameParser(), $loader); $templating->set(new SlotsHelper()); return new Response($templating->render($name, $args), $status); }
$app->register(new FormServiceProvider()); $app->register(new CsrfServiceProvider()); $app->register(new Silex\Provider\SessionServiceProvider()); $app->register(new TwigServiceProvider(), array('twig.path' => __DIR__ . '/../web/templates', 'twig.class.path' => __DIR__ . '/../vendor/twig/lib')); $app['templating.engines'] = function () { return array('twig', 'php'); }; $app['templating.loader'] = function () { return new FilesystemLoader(__DIR__ . '/../web/templates/%name%'); }; $app['templating.template_name_parser'] = function () { return new TemplateNameParser(); }; $app['templating.engine.php'] = function () use($app) { $engine = new PhpEngine($app['templating.template_name_parser'], $app['templating.loader']); $engine->set(new SlotsHelper()); return $engine; }; $app['templating.engine.twig'] = function () use($app) { return new TwigEngine($app['twig'], $app['templating.template_name_parser']); }; $app['templating'] = function () use($app) { $engines = array(); foreach ($app['templating.engines'] as $i => $engine) { if (is_string($engine)) { $engines[$i] = $app[sprintf('templating.engine.%s', $engine)]; } } return new DelegatingEngine($engines); }; $app->register(new DoctrineServiceProvider(), array('db.options' => array('dbname' => 'silex', 'user' => 'silex', 'password' => 'silex')));
static function setup($app) { // Set debug setting $app['debug'] = $app['config']['debug']; // Setup logging $app->register(new \Silex\Provider\MonologServiceProvider(), array('monolog.logfile' => $app['root_path'] . '/app/logs/AppName.log', 'monolog.level' => $app['debug'] ? \Monolog\Logger::DEBUG : \Monolog\Logger::NOTICE, 'monolog.name' => 'AppName')); // Setup sessions $app->register(new SessionServiceProvider()); // Setup PHP Activerecord DB connection if (strncasecmp(PHP_OS, 'WIN', 3) == 0) { // Windows // I couldn't get an absolute path to work on windows. Using relative. $path = 'sqlite://windows(../app/db/db.sqlite)'; } else { // Unix-like $path = 'sqlite://unix(' . $app['root_path'] . '/app/db/db.sqlite)'; } $app['activerecord.cfg'] = \ActiveRecord\Config::instance(); $app['activerecord.cfg']->set_connections(array('prod' => $path)); \ActiveRecord\Config::initialize(function ($cfg) { $cfg->set_default_connection('prod'); }); // Setup symfony php template views $app['view'] = $app->share(function ($app) { $loader = new FilesystemLoader($app['root_path'] . '/app/template/%name%'); $templating = new PhpEngine(new TemplateNameParser(), $loader); // Initialise the slots helper $templating->set(new SlotsHelper()); return $templating; }); // Setup basic app authentication $app->register(new \Silex\Provider\SecurityServiceProvider()); $app->register(new \Silex\Provider\RememberMeServiceProvider()); $app['security.firewalls'] = array('login' => array('pattern' => '^/login$', 'anonymous' => true), 'create_password' => array('pattern' => '^/create_password', 'users' => $app->share(function () use($app) { return new \AppName\Security\UserProvider(); }), 'anonymous' => true), 'main' => array('form' => array('login_path' => '/login', 'check_path' => '/login_check'), 'logout' => array('logout_path' => '/logout'), 'pattern' => '^/', 'users' => $app->share(function () use($app) { return new \AppName\Security\UserProvider(); }), 'remember_me' => array('key' => 'j34krjh23lk4jh23lktc3ktjh', 'name' => 'AppName', 'always_remember_me' => true))); // Conveinience function to get username $app['current_username'] = $app->share(function ($app) { $token = $app['security']->getToken(); // Return username, if available if (null !== $token) { $user = $token->getUser(); return $user->getUsername(); } else { return 'anon'; } }); // Need to boot app here due to security bundle needing to be initialized before being used. // $app->boot(); // Setup custom logging processor. Sets username and IP for every log message // $app['monolog']->pushProcessor(array(new \AppName\Monolog\LogProcessor($app['security']), 'logProcessor')); /** * Accept JSON Requests */ $app->before(function (Request $request) { if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) { $data = json_decode($request->getContent(), true); $request->request->replace(is_array($data) ? $data : array()); } }); /** * Error handler. Return a JSON object with error info */ // $app->error(function(\Exception $e) use ($app){ // // Let this type of exception pass through, it will prompt for authentication. // if($e instanceof \Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException) // return; // // Let 404 errors go through // if($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) // return; // $return = array('message' => $e->getMessage()); // $return['class'] = get_class($e); // if($app['debug']){ // $return['trace'] = $e->getTrace(); // $return['file'] = $e->getFile(); // $return['line'] = $e->getLine(); // $return['code'] = $e->getCode(); // } // return $app->json($return, 500); // }, 0); // Debug controllers if ($app['debug']) { $app->get('/make_error/', function (Request $request) use($app) { throw new Exception('Test exception'); return ''; }); } return $app; }
* @package Gksoft * @author Galina Kozyreva <*****@*****.**> */ use Symfony\Component\Templating\PhpEngine; use Symfony\Component\Templating\TemplateNameParser; use Symfony\Component\Templating\Loader\FilesystemLoader; use Symfony\Component\Templating\Helper\SlotsHelper; use Symfony\Bundle\FrameworkBundle\Templating\Helper\ActionsHelper; $app->register(new Silex\Provider\ServiceControllerServiceProvider()); $app->register(new Silex\Provider\DoctrineServiceProvider(), array('db.options' => $app['config']['db'])); $app->register(new Silex\Provider\SessionServiceProvider()); /* Представление */ $app['templating.engine.php'] = $app->share(function () use($app) { $phpEngine = new PhpEngine(new TemplateNameParser(), new FilesystemLoader(__DIR__ . '/../templates/%name%')); /* Хелперы представления */ $phpEngine->set(new SlotsHelper()); $inlineFragmentRenderer = new \Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer($app); $requestStack = new \Symfony\Component\HttpFoundation\RequestStack(); $requestStack->push($app['request']); $fragmentHandler = new \Symfony\Component\HttpKernel\Fragment\FragmentHandler(array($inlineFragmentRenderer), $app['debug'], $requestStack); $phpEngine->set(new ActionsHelper($fragmentHandler)); return $phpEngine; }); /* Модели */ $app['models.products'] = $app->share(function () use($app) { return new Gksoft\Models\Catalog($app['db']); }); $app['models.users'] = $app->share(function () use($app) { return new Gksoft\Models\Users($app['db']); }); /* Контроллеры */