目錄
準備其餘的
路線
>現在我們可以開始構建一些東西。我不會在這裡介紹所有的休息,因為很難解釋所有事情 - 要更深入地了解更多內容,請參閱本系列。讓我們從照相控制器開始。
結論
>我如何使用Laravel API資源?
使用Laravel API資源,您首先需要創建資源類。可以使用Artisan Command Php Artisan Make:Resource ResourceName來完成此操作。創建資源類後,您可以在資源的Toarray方法中定義轉換。要從路線返回資源,您只需返回資源類的新實例,傳遞要轉換的數據。
在Laravel中的資源和集合之間有什麼區別?
>如何從Laravel的路由返回資源集合?在Laravel中,您只需返回資源收集類的新實例,傳遞了要轉換的模型集合。
>
首頁 後端開發 php教程 使用Laravel建立休息資源

使用Laravel建立休息資源

Feb 20, 2025 am 11:50 AM

使用Laravel建立休息資源

在這一部分中,我們將開始使用REST接口。在Laravel上創建REST API並不是很困難。我們需要記住的是,我們正在與Emberjs打交道,並且我們不想從頭開始寫一個新的適配器。像往常一樣,您可以在github上找到此部分的源代碼。

>

鑰匙要點

    >使用ember.js約定在用laravel構建REST API時確保兼容並簡化開發過程。
  • >使用工匠命令行工具在Laravel中創建資源控制器,以有效地管理靜止資源,而無需手動定義CRUD操作。
  • >通過在Laravel中的特定名稱空間中分組,增強API結構和可訪問性,可以有效地組織路線。 >
  • >在控制器中實現錯誤處理和響應格式以管理數據檢索並確保強大的API端點。
  • >利用Laravel的雄辯和API資源類別將模型數據轉換為JSON響應,從而促進了與Ember.js等前端框架的輕鬆集成。
  • 從哪裡開始?
  • 這是一個很難的問題。 Ember擁有自己的工作流程和邏輯。如果我們開始牢記這種邏輯來寫下我們的休息,我們將節省一些時間,我們將擁有一個不錯的體系結構和可重複使用的東西。我認為Ember在其休息建築上做出了不錯的選擇。看看Ember如何期望數據。
  • >
>假設我們要檢索用戶。 Ember期望這樣的事情:

如果我們想檢索用戶列表,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,而我的頭版原型是:

>

使用Laravel建立休息資源

讓我們開始構建它。 Open/App/views/index.php。這是我們的單頁應用程序。我們在本系列的第一部分中創建了此文件。

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }
登入後複製
登入後複製
登入後複製
登入後複製

允許我解釋這一點。 NAV標籤負責導航。帶有類標題區域的UL標籤是文本,該文本用作徽標,該徽標鏈接到應用程序的第一個級別。我還添加了一個帶有類別列表的下拉菜單。如果您想了解更多信息,請前往基礎5個文檔。在大多數情況下,它只是複制/粘貼操作,所以不必擔心此部分。 >

>另外,我在內容區域使用了Foundation的網格系統。這將充滿所有信息,並在導航時進行更改。所有內部更新將由Ember處理。我們將在這裡僅構建3個模板。一個用於用戶,一張用於一張照片,一張用於著陸頁。

>

您是否注意到我們所有的代碼都在腳本標籤中? Ember使用車把作為模板語言。文本/X Handlebars的類型是一種特殊的腳本類型。如果您使用了Ember和車把一段時間,則可能使用模板名稱。我沒有在此中指定它們,因為此模板將用作所有應用程序的容器。如果您沒有指定名稱,Ember將其用作應用程序模板。

資源控制器

>我開發了這個非常簡單的應用程序時,我發現在開發REST API時,資源控制器會派上用場。這就是其餘體系結構的重點 - 一切都是資源。所有資源都可以應用HTTP動詞:獲取,發布,刪除,put(更新)。並非所有動詞都需要。

{
      "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

>我必須承認,我愛上了phpstorm,並且在測試REST API時,我使用了稱為REST客戶端的工具。這是一個圖形界面,簡化了測試。如果需要,也可以使用終端中的捲發。讓我們進行一些測試:

php artisan controller:make CategoryController --only=show,index
登入後複製
登入後複製
這就是返回的東西:

>

使用Laravel建立休息資源

使用PhpStorm的REST客戶端,我在JSON中獲得了相同的結果。

使用Laravel建立休息資源>,如果我想以更好的格式查看結果,我可以簡單地按JS圖標,而剩下的客戶端給我更好的表示。

>

>您還可以測試其他動詞,例如DELETE和POST。繼續進行測試。您還可以使用其他客戶進行測試:REST控制台和Postman是其中兩個。第一個僅在Chrome上可用,第二個Postman可在Chrome和Firefox上使用。郵遞員似乎更簡單,更友好。繼續嘗試。

結論

Laravel簡化了使用資源控制器構建REST API的工作。我們看到瞭如何通過使用Ember慣例構建界面。 Ember選擇了一個良好的界面,並堅持使用該邏輯,您可以輕鬆地在其他平台上重複使用代碼。

在這一部分中,我更多地關注概念,並且沒有做太多的編碼。填寫所有方法並添加驗證將不必要地擴展此帖子,而該帖子已經足夠長,並且在一個長系列中。開發時,您應始終驗證輸入。不要忘記它,測試,測試,測試。測試應該是您最好的朋友。

在本系列的最後一期中,我們將將它們全部放在一個功能齊全的實時應用程序中。

常見問題有關用Laravel

建立休息資源的問題

>如何在laravel中創建一個資源控制器?該命令是PHP Artisan Make:Controller Controllername -Resource。將“ ControlerName”替換為要給控制器的名稱。此命令將使用用於所有必要的CRUD操作的方法創建一個控制器。請記住,控制器的名稱應以單數形式,應該是有效的PHP類名稱。

>我如何使用Laravel API資源?

使用Laravel API資源,您首先需要創建資源類。可以使用Artisan Command Php Artisan Make:Resource ResourceName來完成此操作。創建資源類後,您可以在資源的Toarray方法中定義轉換。要從路線返回資源,您只需返回資源類的新實例,傳遞要轉換的數據。

如何自定義Laravel資源返回的數據? 🎜>您可以通過修改資源類中的Toarlay方法來自定義Laravel資源返回的數據。 ToArray方法是將雄辯的模型屬性映射到API響應屬性的地方。您可以根據需要添加,刪除或更改屬性。

在Laravel中的資源和集合之間有什麼區別?

在Laravel中,資源類代表一個單個模型,需要將其轉換為JSON結構,而資源收集類代表集合資源。資源集合用於將模型或集合轉換為JSON。 Artisan Command Php Artisan Make:Resource ResourceCenameCollection-收集。這將創建一個資源集合類,您可以在其中定義集合的轉換。

>如何從Laravel的路由返回資源集合?在Laravel中,您只需返回資源收集類的新實例,傳遞了要轉換的模型集合。

我可以將元數據添加到Laravel中的資源響應中嗎?是的,你可以將元數據添加到Laravel中的資源響應中。這可以通過定義資源上的方法來完成。使用方法應返回要在響應中包含的元數據數組。

>我如何處理laravel資源中的條件屬性?

laravel Resources提供一種方法時,有條件地將屬性添加到資源響應中。當方法接受兩個參數:確定是否應包括屬性的條件,以及屬性的值,如果條件為真。是的,Laravel Resources與Laravel的內置分頁完美搭配。當您分解Laravel雄辯的查詢時,Laravel將自動返回JSON響應,其中包括分頁結果以及分頁鏈接。如果要自定義分頁響應,則可以使用資源集合。

>

以上是使用Laravel建立休息資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

See all articles