2016-12-26 3 views
0

Я пытаюсь получить данные для нового поля, добавленного на странице входа. Что я сделал:Добавление новой глобальной переменной в twig

  1. Изменить AccountController.php функции Войти при добавлении нового параметра: $this->_app->login($user, $client, !empty($data['rememberme']))
  2. В Userfrosting.php функции Войти Я установил его в применении: $this->client = $client;
  3. В setupTwigUserVariables Funtion добавил веточку глобальную: $twig->addGlobal("client", $this->client);

Проблема в том, что в шаблоне {{client.id}} ничего не возвращает. Любая помощь будет оценена.

+0

Как вы устанавливаете значение '$ client' изначально, когда вы передаете его в' $ this -> _ app-> login() '? – alexw

+0

'$ client = Client :: where ('client_id', $ data ['client_id']) -> где ('userid', $ user-> id) -> first();' –

+0

Можете ли вы подтвердить, что что фактически загружает объект «Клиент»? Возможно, используя 'error_log ($ client-> id)'? – alexw

ответ

0

В UserFrosting 4 вы должны создать расширение Twig в каталоге Sprinkle src/Twig/ и добавить переменную в возвращаемое значение для getGlobals.

Ваша ситуация немного сложная, так как я не уверен, как client может быть глобальной переменной, но в то же время зависит от $data['client_id'] - который представляется параметром запроса. На данный момент я предполагаю, что вы отправляете этот параметр с любыми запросами, для которых требуется переменная client.

<?php 
/** 
* Stack Overflow 
* 
* @link  https://stackoverflow.com 
*/ 
namespace UserFrosting\Sprinkle\Site\Twig; 

use Interop\Container\ContainerInterface; 
use UserFrosting\Sprinkle\Site\Database\Models\Client; 

/** 
* Extends Twig functionality for the Site sprinkle. 
* 
* @author Jose Luis 
*/ 
class Extension extends \Twig_Extension 
{ 

    protected $services; 
    protected $config; 

    public function __construct(ContainerInterface $services) 
    { 
     $this->services = $services; 
     $this->config = $services->config; 
    } 

    public function getName() 
    { 
     return 'myproject'; 
    } 

    public function getGlobals() 
    { 
     try { 
      $currentUser = $this->services->currentUser; 

      // Assumes the client_id is being submitted as a query string (url) parameter 
      $clientId = $this->services->request->getQueryParam('client_id'); 

      $client = Client::where('client_id', clientId)->where('userid', $currentUser->id)->first(); 
     } catch (\Exception $e) { 
      $client = null; 
     } 

     return [ 
      'client' => $client 
     ]; 
    } 
} 

Затем вам нужно будет зарегистрировать это расширение в вашем Посыпать-х service provider class:

<?php 
/** 
* Stack Overflow 
* 
* @link  https://stackoverflow.com 
*/ 
namespace UserFrosting\Sprinkle\Site\ServicesProvider; 

use UserFrosting\Sprinkle\Site\Twig\Extension as JoseExtension; 

/** 
* Services provider for the Site sprinkle. 
* 
* @author Jose Luis 
*/ 
class ServicesProvider 
{ 
    /** 
    * Register extended user fields services. 
    * 
    * @param Container $container A DI container implementing ArrayAccess and container-interop. 
    */ 
    public function register($container) 
    { 
     /** 
     * Extends the 'view' service with Jose's Twig Extension. 
     */ 
     $container->extend('view', function ($view, $c) { 
      $twig = $view->getEnvironment(); 
      $extension = new JoseExtension($c); 
      $twig->addExtension($extension); 

      return $view; 
     }); 
    } 
} 

Да, я знаю, что есть много шаблонных здесь. Однако, как только вы установите их в первый раз, легко добавить новые переменные/функции/фильтры в среду Twig и новые сервисы для вашего Sprinkle в будущем.

 Смежные вопросы

  • Нет связанных вопросов^_^