iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
Modern Web

PHP框架-Symfony4 + api platform 系列 第 4

Day#4 會重工的東西來一遍就好了,不要一直跟牛魔王出來看上帝-Parameter參數

使用parameter有什麼好處!!?


假設,今天我在很多個控制器裡都使用到相同的東西(路徑,數值...等等),
我就會選擇把它寫成參數,這樣一來我只要呼叫那個參數就可以得到相對應的值!!,
如果今天我要改參數的值,我不用進每一個控制器裡改,我只要改參數檔裡的參數就好了!!

對!不用懷疑! 就是這麼方便~

那可是.....參數要從哪裡生出來,要從哪裡使用呢....?


首先! 先在config資料夾底下建立一個yaml(押某)檔

接著,因為我們拿參數也是透過某個Service取得,所以必須在service.yaml檔裡導入我們所建的yaml檔才能使用,後面會提到是透過哪一個Service取得的

再來,回到我們的test.yaml設定參數囉~

那個parameters一定要給 !!!! ,再來是給予參數的id,及所要賦與的值

設定檔的格式非常的嚴謹,只要多一個空白或少一個空白,它就會壞給你看

設定參數的這部分,若是要直接放在service.yaml也是可以的哦,我會這樣做,只是單純不想要service.yaml看起來太多東西,而且也方便區分

參數檔建置完畢,參數設定完成,也導入service.yaml,接下來就是如何把它給千呼萬喚使出來了


首先!! 我們要先依賴注入ParameterBagInterface 這個服務,對,這就是上面提到的,我們要透過它來呼叫參數,下面示範在建構子內初始化,並在Action內呼叫

  	
 class TestController extends AbstractController{
   	private $params;

    public function __construct(ParameterBagInterface $params)
    {
        $this->params = $params;
    }
    
     /**
     * @Route(
     *      "/test",
     *      name="test"
     * )
     */
    public function test(){
    	$myParameter=$this->params->get('system_name2')
    }
 } 	

上面get裡放的是參數的id

如果,我們要在參數檔裡面呼叫另一個參數,必須在前後加上%來呼叫


一般狀況下,環境分為三種

1.dev 開發環境 : 可以讀取錯誤資訊,或是任何的更動,且會顯示toolbar,但如果有任何設定檔變動,
必須先清理cache(緩存) => 指令 php bin/console cache:clear ,
開發環境的讀取速度較慢

2.prod 使用者環境 : 讀取速度較快,不會顯示toolBar,如果有任何code變動,也須先清理緩存

3.test 測試環境 : 用於測試完成的控制器

要如何更改目前的環境呢 ?

首先,先到專案目錄下找尋一個名稱叫.env的檔案

找到裡面有一個參數APP_ENV,將其設定為自己想要的環境

這個環境變數會被傳入哪個檔案來執行!!? 答案是 ..... 目錄src底下的Kernel.php

裡面有四個function

1.registerBundles: 這是用來註冊Bundles的方法,可以拿到目前的環境變數

2.getProjectDir : 取得專案目錄

3.configureContainer: 用來讀取php,xml,yaml,yml..類的檔案,
讀取的順序會先從目錄為package底下的設定檔開始,
接著讀取package底下子目錄內的設定檔,
子目錄內的設定檔如果名稱與package目錄設定檔的名稱一樣,
會覆蓋掉package內的設定檔,最後一個讀取service.yaml

4.configureRoutes : 用來讀取routes目錄下的設定檔,再讀取子目錄下的設定檔,
子目錄下的設定檔一樣會蓋過route目錄下的設定檔

我知道我知道!! 講到這裡各位看官們可能頭昏的頭昏,眼花的眼花,想睡覺的想睡覺了...但沒辦法,我還是得繼續這趟小菜鳥旅程,這一篇把參數設定,參數的使用及環境變數設定的大概講了一遍,來不及把實體類講完,所以留在下一篇講,下一篇比較不會是設定類的東西了~要來說說實體類Entity和講一下php的生命週期


上一篇
Day#3 從容器裡挖Service來用- 舉例簡易遮罩功能,然後給它依賴注入進去
下一篇
Day#5 實體類(Entity)與Symfony的生命週期(lifecycle)
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言