>
钥匙要点如果我们想检索用户列表,Ember会期望这样的JSON:
第一个需要“用户”,但是第二个需要“用户”。第二个是复数。 Ember也为此规定了一些规则。如果您没有通过以下方式自己指定复数
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
在与Ember更深入的风险之前,警告:Ember是困难而强大的。花点时间学习它的工作原理。
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
>
Ember.Inflector.inflector.irregular('formula', 'formulae');
>
>我从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" } ] }
>
>为类别创建另一个资源控制器。如您所见,仅在此控制器中提供显示和索引方法。我认为显示单个类别并检索所有类别就足够了。>
{ "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>
>
>在该组内添加三个控制器。 PhotoController,UserController和categoryController。
php artisan controller:make PhotoController --except=create,edit
php artisan controller:make CategoryController --only=show,index
>
php artisan controller:make ImagesController --only=show
填充这些控制器
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');
>
{ "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>
>
php artisan controller:make PhotoController --except=create,edit
继续尝试创建类别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中文网其他相关文章!