iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0
Modern Web

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

Day#7 驗證(Validation) 也可以搭配翻譯蒟蒻

要使用validator , 首先要先裝兩個bundle , validator自己及annotation
在第一篇的時候有安裝過了,如果還沒安裝的看官們可以照下列command進行安裝~

composer require symfony/validator doctrine/annotations

安裝完畢後,我們還缺少一個東西...翻譯蒟蒻!! ..

要使用翻譯檔,想必我們又要安裝bundle而且進行config的設定了~

執行底下command 安裝translation bundle

composer require symfony/translation

安裝完以後,會在config目錄下的package資料夾裡看見一個translation.yaml檔,裡面可以進行語系的設定

default_locale 就是設定語系的參數,預設是en 英文語系,zh_TW是台灣語系,
translator底下的default_path參數是我們翻譯檔要放置的路徑位置,
小小提醒~第四篇有說到如果要在設定檔裡呼叫別的設定檔的參數,必須利用%把參數的id包起來呼叫,
上面所呼叫的參數為專案根目錄

接著我們根據路徑位置,至專案目錄下建立一個資料夾名為translations,
接著在資料夾裡建立一個validators.zh_TW.yml 檔案 , 檔案名稱語系的部分一定要對,不然會沒有作用

裡面會放像下列這樣,英文翻譯成中文,
如果不知道某個驗證訊息的英文的話可以到先前有提到的toolbar裡的validator查看

上述是symfony提供欄位不可為空(Not Blank)的驗證,底下是從toolbar裡查看的原文驗證訊息

右半部violation裡的messageTemplate就是原始的驗證訊息,message則是我們翻譯過後的


以上,翻譯蒟蒻也生出來了,就來開始介紹如何使用一些symfony提供的驗證吧 !! 打開先前建立的實體類

用註解式寫法使用以下驗證時,
記得要import Symfony\Component\Validator\Constraints as Assert 這個Class 哦~
as 後面放的只是這個class的別名 ,可以自己取,但是使用的時候前綴要是這個別名

1.當要驗證此欄位為必填的時候 :

只需要在property上加上註解式寫法Not Blank就好

    /**
     * @ORM\Column(name="name",type="string",length=20,nullable=true)
     * @Assert\NotBlank()
     */
    private $name;

2.當要驗證長度最大及最小時 :

   /**
     * @ORM\Column(name="name",type="string",length=20,nullable=true)
     * @Assert\NotBlank()
     * @Assert\Length(max="20",min="5",maxMessage="長度不可超過20字",minMessage="長度不可低於5個字")
     */
    private $name;

在property上加上Length ,後面可以傳入四個參數 ,
max 為最大可輸入字數, min 則是最小可輸入自數,message的話是錯誤時要顯示的訊息

3.當欄位是email時,需檢查是否符合email格式 :

  /**
     * @ORM\Column(name="email",type="string",length=50,nullable=true)
     * @Assert\Email()
     */
    private $email;

在property上加上Email , symfony validator就會自動幫你驗證欄位是否符合email格式

以上三種是表單上很常用到的驗證,按住ctrl+滑鼠點擊驗證的註解式,
可以發現它們是一個個的annotation class,裡面會去做驗證, 這篇提到驗證需要安裝的bundle及一些基本的驗證,
下一篇會說明如何自己建立客製化validation及使用方式~


上一篇
Day#6 用監聽器(Event Listener) 來當個偷窺狂吧!!
下一篇
Day#8 客製化驗證頂多從一片小蛋糕變三片小蛋糕而已-Customize Validation
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言