搜索
首页后端开发php教程使用Laravel建立休息资源

使用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
                
            

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories
                        <ul >
                            <li><a href="#">Category1
                            <li><a href="#">Category2
                            <li><a href="#">Category3
                            <li><a href="#">Category4
                        
                    
                

            

            <div >
            
        <!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        <!-- 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
                
            

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories
                        <ul >
                            <li><a href="#">Category1
                            <li><a href="#">Category2
                            <li><a href="#">Category3
                            <li><a href="#">Category4
                        
                    
                

            

            <div >
            
        <!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        <!-- 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
在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

解释PHP中晚期静态结合的概念。解释PHP中晚期静态结合的概念。Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP记录:PHP日志分析的最佳实践PHP记录:PHP日志分析的最佳实践Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

如何注册和使用Laravel服务提供商如何注册和使用Laravel服务提供商Mar 07, 2025 am 01:18 AM

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始

自定义/扩展框架:如何添加自定义功能。自定义/扩展框架:如何添加自定义功能。Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中