因為一直在開發TP所以相當然的也用了一些TP的解決辦法。
一個網站總有一些 EMAIL QQ 微信 網站名一類的信息,稱之為網站配置,這一些信息在網站是公用的,所以在TP開發中我們做一引父類的Controller,在其_initialize中實現配置的讀取。
在symfony中,要達到此類結果,我們用服務注入進行解決,注入挺高階的名啊,其實就是一種解決方案罷了。
在MobileBundle中新建一個Service 創建
~~~
<?php
namespace Moblie\MobleBundle\Service;
use Doctrine\ORM\EntityManager;
class ConfigServer
{
protected $configs;
protected $entityManager;
protected $cid;
public function __construct($entityManager)
{
$this->entityManager=$entityManager;
$repository = $this->entityManager->getRepository('AppBundle:Config');
$query = $repository->createQueryBuilder('p')->getQuery();
$configs = $query->getArrayResult();
$arrCon=null;
foreach ($configs as $item){
$arrCon[$item['name']]=$item['value'];
}
$this->configs=$arrCon;
}
public function getGlobals(){
return $this->configs;
}
}
~~~
$entityManager 為構造function傳入的參數,類型是doctrine.orm.entity_manager,這里體現不出來,但我們在配置里加入以下代碼:
~~~
app.configs:
class: Moblie\MobleBundle\Service\ConfigServer
arguments: ["@doctrine.orm.entity_manager"]
~~~
調用服務的代碼我們寫在一個基類里:
形式如下:
在基類的twig
~~~
{% set confs= configs.getGlobals %}
<!DOCTYPE HTML>
<html>
<head>
<title>{% block title %}{{ confs.webname }}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="" />
<script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); } </script>
<link href="{{ asset('css/bootstrap.min.css')}}" rel='stylesheet' type='text/css' />
<link href="{{ asset('css/style.css')}}" rel='stylesheet' type='text/css' />
<link href="css/font-awesome.css" rel="stylesheet">
<script src="{{ asset('js/jquery.min.js')}}"></script>
<link href='http://fonts.useso.com/css?family=Roboto:400,100,300,500,700,900' rel='stylesheet' type='text/css'>
<script src="{{ asset('js/bootstrap.min.js')}}"></script>
</head>
<body>
<div id="wrapper">
{{ include('public/top.html.twig') }}
<div id="page-wrapper">
<div class="graphs">
{% block body %}{% endblock %}
{{ include('public/footer.html.twig') }}
</div>
</div>
</div>
<link href="{{ asset('css/custom.css')}}" rel="stylesheet">
<script src="{{ asset('js/metisMenu.min.js')}}"></script>
<script src="{{ asset('js/custom.js')}}"></script>
{% block javascripts %}{% endblock %}
</body>
</html>
~~~
{% set confs= configs.getGlobals %} 這里引入了服務及服務方法。讓方法讀出的數組線了confs.
其他頁面調用:
{% extends 'base.html.twig' %}
{% block title %}{{ confs.webname }}{% endblock %}