iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
Modern Web

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

Day#21 小菜鳥踩雷之第一篇- API platform IRI 前綴問題

  • 分享至 

  • twitterImage
  •  

來到了踩地雷之第一篇了~ 這篇要來講前一陣子同事遇到的問題,但小菜鳥也在旁邊跟著偷學了XD


遇到的問題是 , 我們想在後端某個function裡取得特定的IRI ,
一開始,在本機開發想說,因為每一支api的前綴都是/api/.....XXX 這樣,
那想當然,拿IRI的前綴,不是也該長這樣嗎 !? 所以呢,就把前綴給寫死了....
看到這,各位看官一定會覺得說,哀....怎麼會寫死呢?...智商堪憂阿~
原諒我們這些小菜雞 ...好險後來有學到怎麼樣正確去拿IRI

本機開發都是好好的,上了測試機,正式機就不見得了呀...Domain阿...作業系統設定阿....各種都會影響,
於是我們天真的以為那樣可行,上了測試機後發現,不對阿SubDomain就長不一樣,怎麼可以寫死咧...?

正確取得IRI的方式其實是要透過Route加上id去生成完整的路徑

$cityIri=$this->router->generate("api_citys_get_item",[
                'id' => $city
            ], UrlGeneratorInterface::ABS_PATH);


這邊的Router,是用 RouterInterface ,記得要先依賴注入到建構子裡哦!!
然後別忘了import Symfony\Component\Routing\RouterInterface;

generate的第一個參數是api的名字 ,
如果不知道api叫什麼名字的話,可以透過先前有提到的指令去查

php bin/console debug:route

第二個參數是放網址後面要代的參數,因為我們要拿的是IRI , 所以想當然只有id能給~

第三個參數是放生成URL的工具 , :: 後面有很多常數可以給 , 我們所用的是ABS_PATH ,
它可以絕對的路徑("/dir/file"),
還有其他像是ABS_URL("http://example.com/dir/file") 可以生成絕對的url....等等的常數,
差別差在哪呢...? 差在一個是用目錄結構去看,一個是用網址的方式

改成這樣後,上到測試機,正式機,還是手扒雞都沒有問題了,
因為IRI都會跟著SubDomain去變動了~ 可喜可賀,可口可樂~(ノ>ω<)ノ

還有個小小小問題,就是呢...customize Api 的name 不能重複,不然會報500 error

因為小菜鳥有特別去問同事,曾經有踩到什麼嚴重的地雷嗎,看可不可以跟大家分享這樣,
然後同事有碰到作用域的問題,所以下一篇要來講個當初小菜鳥學JAVA時學的觀念,但也適合用在PHP上啦..
畢竟程式語言有些概念是雷同的嘛... 除了要講這個觀念外,也會講在Action和API如何取得request拿到的值 ,
還有個小菜鳥一開始常常犯的錯誤...


上一篇
Day#20 API platform的開關及format設定
下一篇
Day#22 淺談作用域,存取權 ,及 Request取值的兩種方法~
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言