我沒有得到的地方,
我設法設置這個抽象控制器,我把它放在我的默認控制器文件夾中
<?php
namespace Namespace\DefaultBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
class AbstractController extends Controller
{
/**
* Returns a rendered view.
*
* @param string $view The view name
* @param array $parameters An array of parameters to pass to the view
*
* @return string The rendered view
*/
public function renderView($view, array $parameters = array())
{
$parameters = array_merge_recursive($parameters, $this->getDefaultSettings());
return parent::renderView($view, $parameters);
}
/**
* Renders a view.
*
* @param string $view The view name
* @param array $parameters An array of parameters to pass to the view
* @param Response $response A response instance
*
* @return Response A Response instance
*/
public function render($view, array $parameters = array(), Response $response = null)
{
$parameters = array_merge_recursive($parameters, $this->getDefaultSettings());
return parent::render($view, $parameters, $response);
}
/**
* Streams a view.
*
* @param string $view The view name
* @param array $parameters An array of parameters to pass to the view
* @param StreamedResponse $response A response instance
*
* @return StreamedResponse A StreamedResponse instance
*/
public function stream($view, array $parameters = array(), StreamedResponse $response = null)
{
$parameters = array_merge_recursive($parameters, $this->getDefaultSettings());
return parent::stream($view, $parameters, $response);
}
public function getDefaultSettings()
{
$settings = array();
if ($this->getUser()) {
# Just exports to an array
$settings['user'] = $this->getUser()->export();
}
$settings['locales'] = array(
array(
'label' => 'English',
'code' => 'en-us'
),
array(
'label' => 'Swedish',
'code' => 'sv-se'
)
);
return array(
"settings" => $settings
);
}
}
然後我說這一個AbstractController到我的實際控制人:
<?php
namespace Namespace\DefaultBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function indexAction()
{
return new Response($this->renderView("NamespaceDefaultBundle:Default:index.html.twig"));
}
}
然而,當我在我的docblock做@Template()這不起作用。因爲它不使用父類。所以它需要更多的工作,但它做到了我想要的。
然後在layout.html.twig我有以下幾點:
<script type="text/javascript">
var settings = {{ settings | json_encode() | raw }};
</script>
什麼是你需要的。可能有更好的方法來做到這一點。 – ILikeTacos
我需要一些變量,我希望能夠通過javascript定義可訪問的變量。我的帖子在下面讓我有些接近,但並不完美,因爲我無法使用FrameworkExtraBundle。這允許我使用@Template()並返回array();但是這也必須可以覆蓋。 – Oldek