>
鑰匙要點如果我們想檢索用戶列表,Ember會期望這樣的JSON:
第一個需要“用戶”,但是第二個需要“用戶”。第二個是複數。 Ember也為此規定了一些規則。如果您沒有通過以下方式自己指定複數
{ "user": { "firstName": "firstName", "lastName": "lastName" } }emberjs將做出假設並要求“公式”。有時候,框架本身提供了這樣的東西很高興,但是另一方面,如果您忘記了這些細節,事情可能會失控。
在與Ember更深入的風險之前,警告:Ember是困難而強大的。花點時間學習它的工作原理。
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }如果我們使事情有些複雜並在對象之間放置一些關係,例如,我們說用戶有一些照片。我們將如何輸出?
>
Ember.Inflector.inflector.irregular('formula', 'formulae');這是一個一對多的關係。如果我們要求用戶,他的照片也將被拉。我們已經在拉拉維爾(Laravel)建立了一些關係,如果您想要並在Ember上消耗這些關係,可以使用它們。
>
>我從Ember開始,看看該框架如何想要數據。如果您知道如何構建結構,那就容易了。驗證和從數據庫中獲取數據很容易,但是建立一個可靠的REST接口和一個智能的界面,這是困難的部分。當您開發某些東西時,模型可能會非常有幫助。即使您是一名大師程序員,並且討厭處理Photoshop或GIMP,也有很好的原型工具。我使用了balsamiq,而我的頭版原型是:
>
讓我們開始構建它。 Open/App/views/index.php。這是我們的單頁應用程序。我們在本系列的第一部分中創建了此文件。
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
允許我解釋這一點。 NAV標籤負責導航。帶有類標題區域的UL標籤是文本,該文本用作徽標,該徽標鏈接到應用程序的第一個級別。我還添加了一個帶有類別列表的下拉菜單。如果您想了解更多信息,請前往基礎5個文檔。在大多數情況下,它只是複制/粘貼操作,所以不必擔心此部分。
>
您是否注意到我們所有的代碼都在腳本標籤中? Ember使用車把作為模板語言。文本/X Handlebars的類型是一種特殊的腳本類型。如果您使用了Ember和車把一段時間,則可能使用模板名稱。我沒有在此中指定它們,因為此模板將用作所有應用程序的容器。如果您沒有指定名稱,Ember將其用作應用程序模板。資源控制器
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }這就是我們通過工匠創建資源控制器的方式。該選項 - 除了從該控制器中刪除這兩種方法。我們不需要創建和編輯方法。創建方法處理創建該資源的圖形接口。當我們製作一個頁應用程序時,在ember之外創建視圖是不明智的。
>
>為類別創建另一個資源控制器。如您所見,僅在此控制器中提供顯示和索引方法。我認為顯示單個類別並檢索所有類別就足夠了。>
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
>另一個控制器是圖像控制器。為什麼如果我們已經有一個圖像控制器?因為我們需要一個終點來提供圖像。 Dropbox擁有我們的圖像,但我們無法從外部訪問它們。如果您想公開文件夾,則必須付款。那是第一個原因。第二個原因是我不希望每個圖像都公開。簡而言之,該控制器將從Dropbox中獲取圖像並將其提供給客戶端。
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
,最後但並非最不重要的是usercontroller:
>Ember.Inflector.inflector.irregular('formula', 'formulae');
>現在我們擁有控制器,我們需要將這些控制器與其相關路線聯繫起來。讓我們更新 /app/routes.php。 首先,使用Route :: group。
{ "user": { "id": 1, "name": "firstName", "lastname": "lastname, "photos": [1, 2, 3] }, "photos": [ { "id": 1, "title": "Lorem Ipsum" }, { "id": 2, "title": "Lorem Ipsum" } ] }>在這裡,我們指定了一個前綴,即名稱空間。可以這樣訪問此組內部的所有內容:
>
<script type="text/x-handlebars"> <!-- The navigation top-bar --> <nav data-topbar> <ul > <li > <h1><a href="#">Photo Upload</a></h1> </li> </ul> <section > <!-- Left Nav Section --> <ul > <li > <a href="#">Categories</a> <ul > <li><a href="#">Category1</a></li> <li><a href="#">Category2</a></li> <li><a href="#">Category3</a></li> <li><a href="#">Category4</a></li> </ul> </li> </ul> </section> <div ></div> </nav><!-- END Navigation --> <!-- Content --> <div style="margin-top: 50px;"> <!-- The content will be here --> </div><!-- END Content --> </script>>另外,我們可以在該組內指定過濾器。例如,您可以添加一個auth :: Anterbasic('用戶名')過濾或創建一個並將其添加到該組中。您也可以使用其他身份驗證。
>
>在該組內添加三個控制器。 PhotoController,UserController和categoryController。
php artisan controller:make PhotoController --except=create,edit>在該組之外添加ImageScontroller。我認為該控制器不需要一個名稱空間 - 圖像是圖像,給它們提供一個名稱空間是沒有意義的。
php artisan controller:make CategoryController --only=show,index最後, /app/routes.php文件應該看起來像這樣:
>
php artisan controller:make ImagesController --only=show請注意,由於Ember的要求,資源名稱是複數的。
填充這些控制器
index()方法應返回數據庫中的最新照片。在這裡,我們可以做一些分頁,但我不希望事情變得太複雜。如果對評論有足夠的興趣,我們將在以後的文章中更新此應用程序。
>讓我解釋一下。我將所有內容插入了嘗試,捕捉並最終阻止。如果出現問題,請返回帶有狀態代碼的其他JSON。
php artisan controller:make UserController --only=show,index
>從數據庫中獲取9張照片。然後,拍攝每張照片,並以格式化的數組顯示,該數組將在以後轉換為JSON格式。
<span>Route<span>::</span>group(array('prefix' => 'api/v1'), function() </span> <span>{ </span> <span>});</span>如果一切順利,或者雄辯沒有拋棄異常,則會顯示正確的輸出。如果要顯示特定的狀態代碼,請捕獲所有可以通過雄辯拋出的例外,並顯示正確的狀態代碼。
>讓我們立即填寫show()方法。同樣,我們想用給定的ID檢索有關照片的所有信息。
構建自己的應用程序時,請不要忘記將驗證添加到用戶輸入中。
usercontroller的邏輯幾乎相同。這次,我們將要求用戶模型。
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
>一切幾乎相同,只有模型和字段改變。輸出JSON。表演方法看起來像這樣:
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
此功能通過給定的ID檢索用戶。
我們要處理的最後一個控制器是ImagesController。邏輯就像從文件系統中獲取圖像並為其服務一樣簡單。當您保存文件並使用本地文件系統或服務器文件系統檢索時,這很簡單。不幸的是,您無法將文件保存到Heroku,因此您將使用Dropbox並從此端點提供這些文件。導入Dropbox客戶端和Flysystem適配器。如果我們的環境是本地的,那麼我們將與本地適配器一起使用Flysystem;如果環境正在生產,請使用Dropbox適配器。將Flysystem類分配給該控制器內部的私人變量。
Ember.Inflector.inflector.irregular('formula', 'formulae');> Show方法將為該文件提供服務,而Dosty方法將從文件系統中刪除該文件。通過使用此庫,我們在應用程序中放了一定程度的抽象。
>
{ "user": { "id": 1, "name": "firstName", "lastname": "lastname, "photos": [1, 2, 3] }, "photos": [ { "id": 1, "title": "Lorem Ipsum" }, { "id": 2, "title": "Lorem Ipsum" } ] }destroy()函數非常簡單。只需使用刪除方法選擇該文件並傳遞要刪除的文件的名稱。如果找不到文件,請返回404。
>
<script type="text/x-handlebars"> <!-- The navigation top-bar --> <nav data-topbar> <ul > <li > <h1><a href="#">Photo Upload</a></h1> </li> </ul> <section > <!-- Left Nav Section --> <ul > <li > <a href="#">Categories</a> <ul > <li><a href="#">Category1</a></li> <li><a href="#">Category2</a></li> <li><a href="#">Category3</a></li> <li><a href="#">Category4</a></li> </ul> </li> </ul> </section> <div ></div> </nav><!-- END Navigation --> <!-- Content --> <div style="margin-top: 50px;"> <!-- The content will be here --> </div><!-- END Content --> </script>最後,ImageController應該看起來像這樣:
>
php artisan controller:make PhotoController --except=create,edit我們提供的格式是HTML。好的,這有點奇怪。我們想提供圖像,而不是HTML。但是,這不是問題,因為瀏覽器會尋找文件格式並識別如何使用該文件。
繼續嘗試創建類別controller。我把它作為適合你的練習。
測試API
php artisan controller:make CategoryController --only=show,index這就是返回的東西:
>
>,如果我想以更好的格式查看結果,我可以簡單地按JS圖標,而剩下的客戶端給我更好的表示。
>您還可以測試其他動詞,例如DELETE和POST。繼續進行測試。您還可以使用其他客戶進行測試:REST控制台和Postman是其中兩個。第一個僅在Chrome上可用,第二個Postman可在Chrome和Firefox上使用。郵遞員似乎更簡單,更友好。繼續嘗試。
在這一部分中,我更多地關注概念,並且沒有做太多的編碼。填寫所有方法並添加驗證將不必要地擴展此帖子,而該帖子已經足夠長,並且在一個長系列中。開發時,您應始終驗證輸入。不要忘記它,測試,測試,測試。測試應該是您最好的朋友。
在本系列的最後一期中,我們將將它們全部放在一個功能齊全的實時應用程序中。
常見問題有關用Laravel建立休息資源的問題
>如何在laravel中創建一個資源控制器?該命令是PHP Artisan Make:Controller Controllername -Resource。將“ ControlerName”替換為要給控制器的名稱。此命令將使用用於所有必要的CRUD操作的方法創建一個控制器。請記住,控制器的名稱應以單數形式,應該是有效的PHP類名稱。如何自定義Laravel資源返回的數據? 🎜>您可以通過修改資源類中的Toarlay方法來自定義Laravel資源返回的數據。 ToArray方法是將雄辯的模型屬性映射到API響應屬性的地方。您可以根據需要添加,刪除或更改屬性。
在Laravel中,資源類代表一個單個模型,需要將其轉換為JSON結構,而資源收集類代表集合資源。資源集合用於將模型或集合轉換為JSON。 Artisan Command Php Artisan Make:Resource ResourceCenameCollection-收集。這將創建一個資源集合類,您可以在其中定義集合的轉換。
我可以將元數據添加到Laravel中的資源響應中嗎?是的,你可以將元數據添加到Laravel中的資源響應中。這可以通過定義資源上的方法來完成。使用方法應返回要在響應中包含的元數據數組。
以上是使用Laravel建立休息資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!