В 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 в будущем.
Как вы устанавливаете значение '$ client' изначально, когда вы передаете его в' $ this -> _ app-> login() '? – alexw
'$ client = Client :: where ('client_id', $ data ['client_id']) -> где ('userid', $ user-> id) -> first();' –
Можете ли вы подтвердить, что что фактически загружает объект «Клиент»? Возможно, используя 'error_log ($ client-> id)'? – alexw