基本任务清单
简介
此快速入门指南主要为 Laravel 框架提供基本的介绍,其中内容包括数据库迁移、Eloquent ORM、路由、验证、视图,及 Blade 模版。如果你是第一次使用 Laravel 框架或 PHP,那么这会是个很好的开头。如果你已经在使用 Laravel 或者其它的框架,不仿参考我们高级的快速入门指南。
我们将会构建一个简单的任务清单,可以使用它追踪所有想完成的任务(典型的「代办事项清单」例子)。此项目完整的源代码 在 GitHub 上。
安装
首先你需要安装一个全新的 Laravel 框架。你可以选择使用 Homestead 虚拟机 或是其它本机 PHP 环境来运行框架。只要你准备好了本机环境,就可以使用 Composer 安装 Laravel 框架:
composer create-project laravel/laravel quickstart --prefer-dist
你可以随意阅读快速入门指南的剩余部分;不过,如果你想下载这个快速入门指南的源代码并在你的本机机器运行,那么你需要克隆它的 Git 代码仓库并安装依赖:
git clone https://github.com/laravel/quickstart-basic quickstart
cd quickstart
composer install
php artisan migrate
欲了解更多关于构建本机 Laravel 开发环境的文档,请查阅完整的 Homestead 及 安装 文档。
准备数据库
数据库迁移
首先,让我们使用迁移来定义数据表以存储我们所有的任务数据。
Laravel 的数据库迁移提供了一个简单的方式,使用流畅、一目了然的 PHP 代码来定义数据表的结构与修改。你无需再告诉团队成员要手动增加字段至他们本机的数据库中,他们只需要运行你提交到版本控制的迁移,即可应用数据库修改。
Artisan 命令行接口 可以被用于生成各种类,为你构建 Laravel 项目时节省大量手动输入的时间。在此例中,让我们使用 make:migration
命令为 tasks
数据表生成新的数据库迁移:
php artisan make:migration create_tasks_table --create=tasks
此迁移会被放置在项目的 database/migrations
目录中。你可能已经注意到,make:migration
命令已经增加了自动递增的 ID 及时间戳至迁移文件。让我们编辑这个文件并为任务的名称增加额外的 string
字段:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTasksTable extends Migration
{
/**
* 运行迁移。
*
* @return void
*/
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
/**
* 还原迁移。
*
* @return void
*/
public function down()
{
Schema::drop('tasks');
}
}
我们可以使用 migrate
Artisan 命令运行迁移。如果你使用了 Homestead,则必须在虚拟机中运行这个命令,因为你的主机无法直接访问数据库:
php artisan migrate
这个命令会创建我们所有的数据表。如果你使用了数据库客户端来查看数据表,那么你应该会看到新的 tasks
数据表,其中包含了我们迁移中所定义的字段。
接下来,可以为我们的任务定义一个 Eloquent ORM 模型了!
Eloquent 模型
Eloquent 是 Laravel 默认的 ORM(对象关联映射)。Eloquent 通过明确的定义「模型」,让你可以很轻松的在数据库获取及保存数据。一般情况下,每个 Eloquent 模型会直接对应一张数据表。
所以,让我们定义一个对应至 tasks
数据表的 Task
模型。
同样的,我们可以使用 Artisan 命令来生成此模型。在此例中,我们会使用 make:model
命令:
php artisan make:model Task
这个模型会放置在你应用程序的 app
目录中。默认情况下此模型类将是空的。我们不必明确告知 Eloquent 模型要对应哪张数据表,因为它会假设数据表是 模型名称
的复数型态。所以,在此例中,Task
模型会假设对应至 tasks
数据表。所以我们的空模型看起来应该如下:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
//
}
在为我们的应用程序增加路由时,我们会学习更多关于如何使用 Eloquent 模型的知识。当然,你也可以随意参考 完整的 Eloquent 文档 来获取更多信息。
路由
构建路由
接着,我们已经在应用程序中准备好增加一些路由。这些路由会将 URLs 指向控制器或是匿名函数上,当用户进入特定页面时即会被运行。默认情况下,Laravel 所有的路由都会被定义在 app/Http/routes.php
文件中,每个新的 Laravel 项目都会包含此文件。
对于本应用程序,我们知道最后会用到三个路由:一个路由用于显示我们所有任务的清单、一个路由用于添加任务、一个路由用于删除已有的任务。所以,让我们在 app/Http/routes.php
中构建这所有路由:
<?php
use App\Task;
use Illuminate\Http\Request;
/**
* 显示所有任务
*/
Route::get('/', function () {
//
});
/**
* 增加新的任务
*/
Route::post('/task', function (Request $request) {
//
});
/**
* 删除一个已有的任务
*/
Route::delete('/task/{id}', function ($id) {
//
});
显示视图
接着,让我们填写我们的 /
路由。在此路由中,我们想要渲染一个包含添加任务的表单,及目前所有任务清单的 HTML 模版。
在 Laravel 里,所有的 HTML 模版都保存在 resources/views
目录,且我们可以在路由中使用 view
辅助函数来返回这些模版的其中一个:
Route::get('/', function () {
return view('tasks');
});
当然,我们必须先定义这些视图,所以现在开始动手做吧!
构建布局与视图
这个应用程序只会有一张视图,包含添加任务的表单,及目前所有任务的清单。为了帮助你想像此视图的画面,下方是完成后应用程序的截屏,采用了基本的 Bootstrap CSS 样式:
定义布局
几乎所有的网页应用程序都会在不同页面中共用相同的布局。举个例子,应用程序通常在每个页面(如果我们有一个以上页面)的顶部都拥有导航栏。Laravel 使用了 Blade 布局 来让不同页面共用这些相同的功能。
如同我们前面讨论的那样,Laravel 所有的视图都被保存在 resources/views
。所以,让我们来定义一个新的布局视图至 resources/views/layouts/app.blade.php
中。
.blade.php
扩展名会告知框架使用 Blade 模板引擎 渲染此视图。当然,你可以在 Laravel 使用纯 PHP 的模版。不过,Blade 提供了更方便的方式来编写干净、简洁的模板。
我们的 app.blade.php
视图看起来应该如下面这样:
// resources/views/layouts/app.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<title>Laravel 快速入门 - 基本</title>
<!-- CSS 及 JavaScript -->
</head>
<body>
<div class="container">
<nav class="navbar navbar-default">
<!-- Navbar 内容 -->
</nav>
</div>
@yield('content')
</body>
</html>
注意布局中的 @yield('content')
部分。这是特殊的 Blade 命令,让子页面可以在此处注入自己的内容以扩展布局。接着,让我们定义将会使用此布局并提供主要内容的子视图。