一、理解 Laravel 5 的核心概念

正如本章标题所示,我们将对 Laravel 框架进行概述,涵盖与使用 web 服务架构开发 web 应用相关的主要概念。更准确地说,我们将在本书中使用 RESTful 架构。

我们假设您已经对 RESTful 架构以及 web 服务(在这里,我们称之为应用编程接口 ( API )端点如何工作)有了基本的了解。

但是,如果你是这个概念的新手,不要担心。我们将帮助您开始。

Laravel 框架将是一个有用的工具,因为有了它,我们控制器中的所有数据都将默认转换为 JSON 格式。

Laravel 框架是开发网络应用的强大工具,它使用范例惯例而不是配置。开箱即用,Laravel 拥有我们构建现代网络应用所需的所有功能,使用模型视图控制器 ( MVC )。另外,Laravel 框架是当今开发 web 应用最流行的 PHP 框架之一。

从现在到本书结束,我们将简称 Laravel 框架为 Laravel。

Laravel 生态系统绝对不可思议。宅基地、代客、Lumen、Spark 等工具进一步丰富了使用 PHP 进行 web 软件开发的体验。

有许多方法可以开始使用 Laravel 开发 web 应用,这意味着有许多方法可以配置您的本地环境或生产服务器。这一章不赞成任何具体的方式;我们知道每个开发人员都有他或她自己的偏好,是随着时间的推移而获得的。

不管你对工具、服务器、虚拟机、数据库等的偏好如何,我们都会把重点放在主要概念上,不会假设某一种方式是对是错。第一章只是为了说明主要概念和需要执行的操作。

请记住,无论您选择哪种方法(使用宅地、WAMP、MAMP 或 Docker),Laravel 都有一些对 web 应用开发极其必要的依赖(或服务器要求)。

You can find more useful information in the official Laravel documentation at https://laravel.com/docs/5.6.

在本章中,我们将讨论以下几点:

  • 设置环境
  • Laravel 应用的基本架构
  • Laravel 应用生命周期
  • CLI 艺人
  • MVC 和路由
  • 与数据库连接

设置环境

请记住,无论您如何配置您的环境来使用 PHP 和 Laravel 开发网络应用,请记住主要的服务器需求,您将能够遵循本章中的示例。

需要注意的是,有些操作系统没有安装 PHP。由于这是 Windows 机器的情况,这里有一些可供您创建开发环境的选择:

安装 Composer 包管理器

Laravel 使用 Composer ,一个 PHP 的依赖管理器,非常类似于节点包管理器 (NPM) 用于 Node.js 项目,PIP 用于 Python,Bundler 用于 Ruby。让我们看看官方文件是怎么说的:

"A Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you."

因此,让我们安装 Composer,如下所示:

前往https://getcomposer.org/download/,按照您所在平台的说明进行操作。

You can get more information at https://getcomposer.org/doc/00-intro.md.

请注意,您可以在本地或全局计算机上安装 Composer 现在不用担心。选择对你来说最容易的。

所有使用 Composer 的 PHP 项目在根项目中都有一个名为composer.json的文件,看起来类似如下:

{
 "require": {
     "laravel/framework": "5.*.*",
 }
}

这也非常类似于 Node.js 和 Angular 应用上的package.json文件,我们将在本书后面看到。

Here's a helpful link about the basic commands: https://getcomposer.org/doc/01-basic-usage.md

安装 Docker

我们将在本章中使用 Docker。即使 Laravel 的官方文档建议将 Homestead 与虚拟机和游民一起使用,我们还是选择了使用 Docker,因为它快速且易于启动,我们主要关注的是 Laravel 的核心概念。

You can find more information about Docker at https://www.docker.com/what-docker.

正如 Docker 文档所述:

Docker is the company driving the container movement and the only container platform provider to address every application across the hybrid cloud. Today’s businesses are under pressure to digitally transform, but are constrained by existing applications and infrastructure while rationalizing an increasingly diverse portfolio of clouds, datacenters, and application architectures. Docker enables true independence between applications and infrastructure and developers and IT ops to unlock their potential and creates a model for better collaboration and innovation.

让我们安装 Docker,如下所示:

  1. 前往https://docs.docker.com/install/
  2. 选择您的平台并遵循安装步骤。
  3. 如果有任何问题,请查看https://docs.docker.com/get-started/的入门链接。

由于我们正在使用 Docker 容器和图像来启动我们的应用,并且不想深入了解 Docker 在幕后是如何工作的,下面是一些 Docker 命令的简短列表:

| 命令: | 说明: | | docker ps | 显示正在运行的容器 | | docker ps -a | 显示所有容器 | | docker start | 启动容器 | | docker stop | 停止集装箱 | | docker-compose up -d | 在后台启动容器 | | docker-compose stop | 停止docker-compose.yml文件上的所有容器 | | docker-compose start | 启动docker-compose.yml文件上的所有容器 | | docker-compose kill | 杀死docker-compose.yml文件上的所有容器 | | docker-compose logs | 将所有容器记录在docker-compose.yml文件中 |

You can check the whole list of Docker commands at https://docs.docker.com/engine/reference/commandline/docker/. And Docker-compose commands at https://docs.docker.com/compose/reference/overview/#command-options-overview-and-help.

配置 PHPDocker.io

PHPDocker.io 是一个简单的工具,它帮助我们使用 Docker/Container 概念和 Compose 来构建 PHP 应用。非常容易理解和使用;那么,让我们看看我们需要做什么:

  1. 前往https://phpdocker.io/
  2. 单击生成器链接。
  3. 填写信息,如下图所示。
  4. 单击生成项目归档按钮并保存文件夹:

PHPDocker interface

数据库配置如下图所示:

Database configuration Note that we are using the latest version of the MYSQL database in the preceding configuration, but you can choose whatever version you prefer. In the following examples, the database version will not matter.

设置 PHPDocker 和 Laravel

现在我们已经填写了前面的信息,并为我们的机器下载了文件,让我们开始设置我们的应用,以便更深入地研究 Laravel 应用的目录结构。

执行以下步骤:

  1. 打开bash/Terminal/cmd
  2. 转到 Mac 和 Linux 上的Users/yourname,或者 Windows 上的C:/

  3. 在文件夹中打开您的终端,并键入以下命令:

composer create-project --prefer-dist laravel/laravel chapter-01

在终端窗口的末尾,您将看到以下结果:

Writing lock file
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postUpdate
> php artisan optimize
Generating optimized class loader
php artisan key:generate
  1. 在“终端”窗口中,键入:
cd chapter-01 && ls

结果如下:

Terminal window output

恭喜你!您有了第一个 Laravel 应用,它是用Composer包管理器构建的。

现在,是时候将我们的应用与从 PHPDocker 下载的文件(我们的 PHP/MySQL Docker 截图)结合起来了。为此,请遵循以下步骤。

  1. 抓取下载的档案,hands-on-full-stack-web-development-with-angular-6-and-laravel-5.zip,解压。
  2. 复制所有文件夹内容(一个phpdocker文件夹和一个文件,docker-compose.yml)。
  3. 打开chapter-01文件夹,粘贴内容。

现在,在chapter-01文件夹中,我们将看到以下文件:

chapter-01 folder structure

让我们检查一下,确保我们的配置一切顺利。

  1. 打开您的终端窗口,键入以下命令:
docker-compose up -d

It's important to remember that at this point, you need to have Docker up and running on your machine. If you are completely new to how to run Docker on your machine, you can find more information at https://github.com/docker/labs/tree/master/beginner/.

  1. 请注意,此命令可能需要更多时间来创建和构建所有容器。结果如下:

Docker containers up and running

前面的截图表示我们已经成功启动了所有容器:memcachedwebserver (Nginx)、mysqlphp-fpm

打开浏览器,输入http://localhost:8081;您应该会看到 Laravel 的欢迎页面。

此时,是时候在文本编辑器中打开我们的示例项目并检查所有的 Laravel 文件夹和文件了。您可以选择您习惯的编辑器,或者,如果您愿意,您可以使用我们将在下一节中描述的编辑器。

安装 VS 代码文本编辑器

对于这一章,以及整本书,我们将使用Visual Studio Code(VS Code),一个自由且高度可配置的多平台文本编辑器。它对于在 Angular 和 TypeScript 中处理项目也非常有用。

按照以下步骤安装 VS 代码:

  1. 前往下载页面,在https://code.visualstudio.com/Download选择您的平台。
  2. 按照您平台的安装步骤进行。

VS Code 有一个充满活力的社区,有大量的扩展。你可以在https://marketplace.visualstudio.com/VSCode搜索并找到分机。在接下来的章节中,我们将安装和使用其中的一些。

目前,只需从https://marketplace.visualstudio.com/items?安装 VS 代码图标 item name = roberthuertasm . vs code-icons

Laravel 应用的基本架构

如前所述,Laravel 是现代 web 应用开发的 MVC 框架。它是一个软件架构标准,将信息的表示与用户的交互分开。它所采用的建筑标准并不那么新;自 20 世纪 70 年代中期以来,它就一直存在。它仍然是最新的,许多框架今天仍然在使用它。

You can read more about the MVC pattern at https://en.wikipedia.org/wiki/Model-view-controller.

Laravel 目录结构

现在,让我们看看这个模式是如何在使用 Laravel 的应用中实现的:

  1. 打开 VS 代码编辑器。
  2. 如果这是您第一次打开 VS 代码,请单击顶部菜单并导航至文件|打开。
  3. 搜索chapter-01文件夹,点击打开
  4. 展开 VS 代码左侧的app文件夹。

应用文件如下:

Laravel root folder The phpdocker folder and docker-compose.yml files are not part of the Laravel framework; we added these files manually, earlier in this chapter.

MVC 流程

在一个非常基本的 MVC 工作流中,当用户与我们的应用交互时,会执行下面截图中的步骤。想象一个关于书籍的简单 web 应用,带有一个搜索输入字段。当用户输入图书名称并按进入时,将出现以下流程循环:

MVC flow

MVC 由以下文件夹和文件表示:

| MVC 架构 | 应用路径 | | 文件 | | 模型 | app/ | | User.php | | 视角 | resources/views | | welcome.blade.php | | 控制器 | app/Http/Controllers | | Auth/AuthController.php Auth/PasswordController.php |

请注意,应用模型位于app文件夹的根,并且应用已经至少有一个用于 MVC 实现的文件。

还要注意的是app文件夹包含了我们应用的所有核心文件。其他文件夹有非常直观的名称,例如:

| Bootstrap | 缓存、自动加载和引导应用 | | 配置 | 应用的配置 | | 数据库ˌ资料库 | 工厂、迁移和种子 | | 公众 | JavaScript、CSS、字体和图像 | | 资源 | 视图、SASS/LESS 和本地化 | | 储存;储备 | 该文件夹包含独立的应用、框架和日志 | | 试验 | 使用 PHPunit 的单元测试 | | 小贩 | 作曲家依赖项 |

现在,让我们看看在 Laravel 结构中事情是如何工作的。

Laravel 应用生命周期

在一个 Laravel 应用中,流程与前面的例子几乎相同,但是稍微复杂一些。当用户在浏览器中触发一个事件时,请求到达网络服务器(Apache/Nginx),在那里我们运行我们的网络应用。因此,服务器将请求重定向到public/index.php,这是整个框架的起点。在bootstrap文件夹中,autoloader.php被启动,并且将由作曲家检索实例生成的所有文件加载到 Laravel 应用中。

让我们看看下面的截图:

Laravel application cycle

这个图对于我们的第一章来说已经足够复杂了,所以我们不会进入用户请求执行的所有步骤。相反,我们将继续讨论另一个非常重要的特性,这是 Laravel 中的一个主要概念:Artisan 命令行界面(CLI)

You can read more about the request life cycle in Laravel in the official documentation at https://laravel.com/docs/5.2/lifecycle.

Artisan 命令行界面

现在,使用命令行创建 web 应用是一种常见的做法;而且,随着 web 开发工具和技术的发展,这已经变得非常流行。

我们会提到 NPM 是最受欢迎的城市之一。但是,对于使用 Laravel 开发应用,我们有优势。当我们创建一个 Laravel 项目时,Artisan CLI 会自动安装。

让我们看看 Laravel 的官方文档对 Artisan CLI 的描述:

Artisan is the name of the command-line interface included with Laravel. It provides a number of helpful commands for your use while developing your application.

chapter-01文件夹中,我们找到了 Artisan bash 文件。它负责运行 CLI 上所有可用的命令,其中有许多命令,用于创建类、控制器、种子等等。

在简单介绍了 Artisan CLI 之后,没有什么比看一些实际例子更好的了。所以,让我们动手吧,别忘了启动 Docker:

  1. 打开chapter-01文件夹内的终端窗口,输入以下命令:
docker-compose up -d
  1. 让我们进入php-fpm container并输入以下内容:
docker-compose exec php-fpm bash

我们现在在终端中有所有可用的 Artisan CLI 命令。

这是在 Docker 容器中与终端交互的最简单方式。如果您使用另一种技术来运行 Laravel 应用,如本章开头所述,则不需要使用以下命令:

docker-compose exec php-fpm bash

您只需在终端中键入下一步中相同的命令。

  1. 仍然在终端中,键入以下命令:
php artisan list

您将看到框架版本和所有可用命令的列表:

Laravel Framework version 5.2.45
Usage:
 command [options] [arguments]
Options:
 -h, --help            Display this help message
 -q, --quiet           Do not output any message
 -V, --version         Display this application version
 --ansi            Force ANSI output
 --no-ansi         Disable ANSI output
 -n, --no-interaction  Do not ask any interactive question
 --env[=ENV]       The environment the command should run under.
 -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
...

如您所见,命令列表非常大。请注意,在上面的代码片段中,我们没有将所有可用的选项放在php artisan list命令中,但是我们将在下一行看到一些组合。

  1. 在您的终端中,键入以下组合:
php artisan -h migrate

输出将准确解释migrate命令可以做什么,以及我们有哪些选项,如下图所示:

Output of php artisan -h migrate

也可以看到migrate命令有哪些选项。

  1. 仍然在终端中,键入以下命令:
php artisan -h make:controller

您将看到以下输出:

Output of php artisan -h make:controller

现在,让我们看看如何使用 Artisan CLI 在 Laravel 应用中创建 MVC。

MVC 和路由

如前所述,我们现在将使用 Artisan CLI 为模型、视图和控制器创建一个组件。然而,正如我们的标题所示,我们将包括另一个重要项目:路线。我们已经在本章中提到了它们(在我们的 Laravel 中的请求生命周期图中,以及 MVC 本身的示例图中)。

在这一节中,我们将着重于创建文件,并在创建后检查它。

创建模型

让我们开始吧:

  1. 打开chapter-01文件夹内的终端窗口,输入以下命令:
php artisan make:model Band

命令后,您应该会看到绿色的成功消息,说明:模型创建成功。

  1. 返回到代码编辑器;在app文件夹内,你会看到Band.php文件,代码如下:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Band extends Model
{
    //
}

创建控制器

现在是时候使用 artisan 来生成我们的控制器了,让我们看看如何做到这一点:

  1. 返回“终端”窗口,键入以下命令:
php artisan make:controller BandController 

命令后,您应该会看到一条绿色消息,说明:控制器创建成功。

  1. 现在,在app/Http/Controllers里面,你会看到BandController.php,内容如下:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class BandController extends Controller
{
    //
}

As a good practice, always create your controller with the suffix <Somename>Controller.

创建视图

正如我们在前面使用php artisan list命令时看到的,我们没有任何别名命令来自动创建应用视图。因此,我们需要手动创建视图:

  1. 回到你的文本编辑器,在resources/views文件夹里面,创建一个新的文件,命名为band.blade.php
  2. 将以下代码放入band.blade.php文件中:
<div class="container">
    <div class="content">
        <div class="title">Hi i'm a view</div>
    </div>
</div>

创建路线

Laravel 中的路由负责引导来自用户请求的所有 HTTP 流量,因此这些路由负责 Laravel 应用中的全部流入,正如我们在前面的图中看到的。

在这一节中,我们将简要地看一下 Laravel 中可用的路由类型,以及如何为我们的 MVC 组件创建一个简单的路由。

在这一点上,只需要看看路线是如何工作的。在本书的后面,我们将深入研究应用路由。

那么,让我们看看我们可以用什么来处理 Laravel 中的路由:

| 密码 | HTTP |方法|动词 | | Route::get($uri, $callback); | 得到 | | Route::post($uri, $callback); | 邮政 | | Route::put($uri, $callback); | 放 | | Route::patch($uri, $callback); | 修补 | | Route::delete($uri, $callback); | 删除 | | Route::options($uri, $callback); | 选择 |

每条可用的路由负责处理一种类型的 HTTP 请求方法。此外,我们可以在同一路径中组合多个方法,如下面的代码所示。现在不要太在意这个;我们将在本书后面看到如何处理这种类型的路由:

Route::match(['get', 'post'], '/', function () {
    //
});

现在,让我们创建第一条路线:

  1. 在您的文本编辑器中,打开routes文件夹内的web.php,并在welcome view后面添加以下代码:
Route::get('/band', function () {
 return view('band');
 });
  1. 打开浏览器到http://localhost:8081/band,会看到如下消息:

嗨,我是景

Don't forget to start all Docker containers using the docker-compose up -d command. If you followed the previous examples, you will already have everything up and running.

太棒了。我们创造了第一条路线。这是一个简单的例子,但是我们已经做好了所有的事情,并且运行良好。在下一节中,我们将了解如何将模型与控制器集成并呈现视图。

与数据库连接

正如我们之前看到的,控制器由路线激活,并在模型/数据库和视图之间传输信息。在前面的例子中,我们在视图中使用了静态内容,但是在更大的应用中,我们几乎总是有来自数据库的内容,或者在控制器中生成并传递给视图的内容。

在下一个例子中,我们将看到如何做到这一点。

在 Docker 容器中设置数据库

现在是时候配置我们的数据库了。如果您使用宅基地,您可能有您的数据库连接配置和工作良好。要进行检查,请打开您的终端并键入以下命令:

php artisan tinker
DB::connection()->getPdo();

如果一切顺利,您将看到以下消息:

Database connection message

然而,对于这个例子,我们使用的是 Docker,我们需要做一些配置来完成这个任务:

  1. 在根项目内部,打开.env文件,查看第 8 行(数据库连接),如下所示:
 DB_CONNECTION=mysql
 DB_HOST=127.0.0.1
 DB_PORT=3306
 DB_DATABASE=homestead
 DB_USERNAME=homestead
 DB_PASSWORD=secret

现在,用下面的行替换前面的代码:

 DB_CONNECTION=mysql
 DB_HOST=mysql
 DB_PORT=3306
 DB_DATABASE=laravel-angular-book
 DB_USERNAME=laravel-angular-book
 DB_PASSWORD=123456

请注意,我们需要改变一点来获得 Docker MySQL 容器方向;如果不记得在PHPDocker.io生成器中选择了什么,可以从容器配置中复制。

  1. 在根目录打开docker-compose.yml
  2. 从 MySQL 容器设置中复制环境变量:
mysql:
  image: mysql:8.0
  entrypoint: ['/entrypoint.sh', '--character-set-server=utf8', '--
  collation-server=utf8_general_ci']
  container_name: larahell-mysql
  working_dir: /application
  volumes:
    - .:/application
  environment:
    - MYSQL_ROOT_PASSWORD=larahell
    - MYSQL_DATABASE=larahell-angular-book
    - MYSQL_USER=larahell-user
    - MYSQL_PASSWORD=123456
  ports:
    - "8083:3306"

现在,是时候测试我们的联系了。

  1. 在终端窗口中,键入以下命令:
docker-compose exec php-fpm bash
  1. 最后,让我们检查一下我们的连接;键入以下命令:
php artisan tinker
DB::connection()->getPdo();

您应该会看到与上一张截图相同的消息。然后,您将拥有继续示例所需的一切。

创建迁移文件和数据库种子

迁移文件在一些 MVC 框架中非常常见,比如 Rails、Django,当然还有 Laravel。正是通过这种类型的文件,我们可以使我们的数据库与我们的应用保持一致,因为我们不能对数据库方案进行版本控制。迁移文件帮助我们将每个变更存储在数据库中,这样我们就可以对这些文件进行版本化,并保持项目的一致性。

数据库种子用于用初始记录批次填充数据库的表;当我们从一开始开发 web 应用时,这非常有用。初始加载的数据可以是多种多样的,从用户表到管理对象,如密码和令牌,以及我们需要的其他一切。

让我们看看如何在 Laravel 中为Bands模型创建迁移文件:

  1. 打开您的终端窗口,键入以下命令:
php artisan make:migration create_bands_table
  1. 打开database/migrations文件夹,会看到一个名为<timestamp>create_bands_table.php的文件。
  2. 打开该文件,在public function up()内粘贴以下代码:
Schema::create('bands', function (Blueprint $table) {
   $table->increments('id');
   $table->string('name');
   $table->string('description');
   $table->timestamps();
});
  1. public function down()内粘贴以下代码:
Schema::dropIfExists('bands');
  1. 最终结果将是以下代码:
<?php
use Illuminate\Support\Facades\Schema;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
class CreateBandsTable extends Migration
 {
     /**
     * Run the migrations.
     *
     * @return void
    */
     public function up()
     {
         Schema::create('bands', function (Blueprint $table) {
         $table->increments('id');
         $table->string('name');
         $table->string('description');
         $table->timestamps();
         });
     }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
     public function down()
     {
         Schema::dropIfExists('bands');
     }
 }
  1. database/factories文件夹内,打开ModalFactory.php文件,在User Factory后面添加以下代码。请注意,我们在一个factory函数中使用了一个名为faker的 PHP 库,以便生成一些数据:
$factory->define(App\Band::class, function (Faker\Generator $faker) {
return [
 'name' => $faker->word,
 'description' => $faker->sentence
 ];
 });
  1. 回到您的终端窗口,创建一个数据库种子。为此,请键入以下命令:
php artisan make:seeder BandsTableSeeder
  1. database/seeds文件夹中,打开BandsTableSeeder.php文件,在public function run()内输入以下代码:
factory(App\Band::class,5)->create()->each(function ($p) {
 $p->save();
 });
  1. 现在,在database/seeds文件夹中,打开DatabaseSeeder.php文件,并在public function run()内添加以下代码:
$this->call(BandsTableSeeder::class);

You can read more about Faker PHP at https://github.com/fzaninotto/Faker.

在我们继续之前,我们需要对Band模型做一个小的重构。

  1. 在应用根目录中,打开Band.php文件,并在Band类中添加以下代码:
protected $fillable = ['name','description'];
  1. 回到您的终端,键入以下命令:
php artisan migrate

执行该命令后,您将在终端窗口中看到以下消息:

 Migration table created successfully.

前面的命令只是用我们的种子填充数据库。

  1. 回到您的终端,键入以下命令:
php artisan db:seed

我们现在有五个项目可以在我们的数据库中使用。

让我们看看一切是否会顺利。

  1. 在终端内部,要退出php-fpm container,输入以下命令:
exit
  1. 现在,在应用根文件夹中,在终端中键入以下命令:
docker-compose exec mysql mysql -ularavel-angular-book -p123456

前面的命令将允许您访问mysql Docker container内部的 MySQL 控制台,几乎与我们访问php-fpm container的方式完全相同。

  1. 在终端内部,键入以下命令查看所有数据库:
show databases;

如你所见,我们有两张表:information_schemalaravel-angular-book

  1. 让我们进入laravel-angular-book表;键入以下命令:
use laravel-angular-book;
  1. 现在,让我们检查一下表格,如下所示:
show tables;
  1. 现在,让我们来看看bands表中的所有记录:
SELECT * from bands;

我们将看到类似以下截图的内容:

Database bands table

  1. 现在,使用以下命令退出 MySQL 控制台:
exit

使用资源标志创建 CRUD 方法

让我们看看 Artisan CLI 的另一个特性,使用一个命令创建所有的创建读取更新T8】删除 ( CRUD )操作。

首先,在app/Http/Controllers文件夹中,删除BandController.php文件:

  1. 打开您的终端窗口,键入以下命令:
php artisan make:controller BandController --resource

该操作将再次创建相同的文件,但是现在,它包括 CRUD 操作,如以下代码所示:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BandController extends Controller
 {
     /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
     public function index()
     {
         //
     }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
     public function create()
     {
         //
     }
    /**
     * Store a newly created resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
     public function store(Request $request)
     {
         //
     }
    /**
     * Display the specified resource.
     *
     * @param int $id
     * @return \Illuminate\Http\Response
     */
     public function show($id)
     {
         //
     }
    /**
     * Show the form for editing the specified resource.
     *
     * @param int $id
     * @return \Illuminate\Http\Response
     */
     public function edit($id)
     {
         //
     }
    /**
     * Update the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @param int $id
     * @return \Illuminate\Http\Response
     */
     public function update(Request $request, $id)
     {
         //
     }
    /**
     * Remove the specified resource from storage.
     *
     * @param int $id
     * @return \Illuminate\Http\Response
     */
     public function destroy($id)
     {
         //
     }
 }

对于这个例子,我们将只编写两个方法:一个列出所有记录,另一个获取特定记录。不要担心其他方法;我们将在接下来的章节中介绍所有的方法。

  1. 让我们编辑public function index()并添加以下代码:
$bands = Band::all();
 return $bands;
  1. 现在,编辑public function show()并添加以下代码:
$band = Band::find($id);
 return view('bands.show', array('band' => $band));
  1. App\Http\Requests后增加一行:
use App\Band;
  1. 将路由文件夹中的routes.php文件更新为以下代码:
Route::get('/', function () {
 return view('welcome');
 });
Route::resource('bands', 'BandController');
  1. 打开浏览器,进入http://localhost:8081/bands,会看到如下内容:
[{
  "id": 1,
  "name": "porro",
  "description": "Minus sapiente ut libero explicabo et voluptas harum.",
  "created_at": "2018-03-02 19:20:58",
  "updated_at": "2018-03-02 19:20:58"}
...]

如果您的数据与之前的代码不同,不要担心;这是由于 Faker 生成了随机数据。请注意,我们将直接向浏览器返回一个 JSON,而不是向视图返回数据。这是 Laravel 非常重要的一个特点;默认情况下,它序列化和反序列化数据。

创建刀片模板引擎

现在,是时候创建另一个视图组件了。这一次,我们将使用 Blade 模板引擎显示数据库中的一些记录。让我们看看官方文档对刀片的描述:

Blade 是 Laravel 提供的简单而强大的模板引擎。与其他流行的 PHP 模板引擎不同,Blade 不限制您在视图中使用普通的 PHP 代码。所有的 Blade 视图都被编译成普通的 PHP 代码并缓存,直到它们被修改,这意味着 Blade 基本上不会给应用增加任何开销。

现在,是时候看看这种行为的实际效果了:

  1. 回到代码编辑器,在resources/views里面创建另一个文件夹,叫做bands
  2. resources/views/bands内部创建一个文件show.blade.php,并在其中放置以下代码:
<h1>Band {{ $band->id }}</h1>
<ul>
<li>band: {{ $band->name }}</li>
<li>description: {{ $band->description }}</li>
</ul>

You can find out more about Blade at https://laravel.com/docs/5.2/blade.

  1. 打开浏览器http://localhost:8081/bands/1。您将看到模板正在运行,结果类似于以下内容:

View of the template engine

请注意,在这里,我们使用 Blade 模板引擎来显示数据库中的记录。现在,让我们创建另一个视图来呈现所有记录。

  1. resources/views/bands内创建另一个名为index.blade.php的文件,并在其中放置以下代码:
@foreach ($bands as $band)
<h1>Band id: {{ $band->id }}</h1>
<h2>Band name: {{ $band->name }}</h2>
<p>Band Description: {{ $band->description }}</p>
@endforeach
  1. 回到浏览器,访问http://localhost:8081/bands/,会看到类似如下的结果:

View template engine

摘要

我们终于完成了第一章,并且已经涵盖了 Laravel 框架的许多核心概念。即使有了我们在本章中讨论的简单示例,我们也为 Laravel 的所有功能提供了相关的基础。仅用这些知识就有可能创造出令人难以置信的应用。然而,我们打算更深入地研究一些值得单独章节讨论的概念。在整本书中,我们将创建一个完整的应用,使用 RESTful API、Angular 和一些其他工具,如 TypeScript,我们将在下一章中讨论。