iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
Modern Web

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

Day#22 淺談作用域,存取權 ,及 Request取值的兩種方法~

  • 分享至 

  • xImage
  •  

作用域會碰到什麼問題嗎?

就是有可能在當你想要使用別的Class某個私有化方法或變數時,
發現紅蚯蚓跟你說不能用,這關係到我們方法跟變數的存取權


存取權分四種

1.default 預設 : 在同一個目錄下的Class可以使用 ,
使用對象 => class類別,Interface接口,變數及function方法

2.private 私有化 : 在同一個類別裡可以使用 , 使用對象 => 變數,function方法

3.protected : 同一個目錄下及所有子類別可以使用 , 使用對象 =>變數,function方法

4.public : 所有類別皆可使用 , 使用對象 => class類別,Interface 接口,變數,function方法

存取權限嚴謹度, 用看的也知道私有化肯定是最囉嗦的呀!!!!
都叫私有化了 , 就是只能是我的的意思(๑´ڡ`๑)

  • 嚴謹度由大到小 private > protected > default > public

下面是小菜鳥整理的圖, 看圖會比看文字容易...


稍稍講完簡單的存取權概念後...接下來要提的是, 如何從API 和 Action裡取得request的值

取得request的值當然很重要, 尤其是在Action或客製化API的時候 ,
一般我們的post or put or patch 方法會取得request的值並將它set到相對應實體類的欄位裡 ,
在客製化API裡或Action裡我們也許只想取得request的值, 然後透過這個值去Repository撈資料 ,
接著回傳我們所撈到的資料

兩個差別差在哪呢 ... ? 用的Class 不一樣,取的方法也有那麼一點點點點不一樣

在Action的時候 ,我們所使用的是Request這個Class

然後透過以下方法去取得request的值

  1. 取得所有的request
$request->request->all()

2.取得某個欄位的request值

$request->request->get('birthday')

在客製化API的時候,我們所使用的是RequestStack這個Class ,
客製化API 要使用依賴注入的方式,注入RequestStack來取得request,

如果是用Request的話,會報500error跟你說沒有這個Service可以用

1.取得所有的request

$request->query->all()

2.取得某個欄位的request值

$request->query->get('birthday')

最後說一下小菜鳥剛入職時一直犯的錯誤.....

就是Repository 有時候 ,是可能撈不到東西的 ,撈不到東西就會是null ,
然後 我常常就是, 沒判斷撈出來有沒有東西,就直接對我想要的欄位做動作,
這時候就會500 error , 很生氣地告訴我 , 阿就null , 你是想幹嘛啦!!?

而且這次數....不誇張 , 大概從入職到現在 有個20次跑不掉 , 雖然 有一直在銳減啦..到現在終於學乖了இдஇ


上一篇
Day#21 小菜鳥踩雷之第一篇- API platform IRI 前綴問題
下一篇
Day#23 用參數取得路徑,版本4.3↑及4.3↓權限控管用法,實體類型別問題~真的是各種雷阿...(((゚Д゚;)))
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言