一步一步带你构建第一个 Laravel 项目
按照步骤,你最终会创建一个简易的链接分享网站。
安装 Laravel Installer
composer global require "laravel/installer"
创建项目
laravel new links
构建认证系统
php artisan make:auth
php artisan migrate
创建 Model & 注入伪数据
创建 Model
为数据库表 links
创建迁移文件。
php artisan make:migration create_links_table --create=links
补充迁移文件的 up
方法。
Schema::create('links', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('url')->unique();
$table->text('description');
$table->timestamps();
});
执行迁移。
php artisan migrate
创建 Link Model。
php artisan make:model Models/Link
修改 ModelFactory.php
,为 Link Model 设定工厂方法。
$factory->define(App\Link::class, function (Faker\Generator $faker) {
return [
'title' => $faker->name,
'url' => $faker->url,
'description' => $faker->paragraph,
];
});
创建种子文件 LinksTableSeeder
。
php artisan make:seeder LinksTableSeeder
在种子文件中使用工厂方法。
public function run()
{
factory(App\Models\Link::class, 10)->create();
}
在 DatabaseSeeder
中注册种子文件。
$this->call(LinksTableSeeder::class);
执行种子文件,为 links
表注入伪数据。
php artisan db:seed
路由和视图
在 routes/web.php
中添加路由。
use App\Models\Link;
use Illuminate\Http\Request;
Route::group(['prefix' => 'links'], function () {
Route::get('', function () {
$links = Link::all();
return view('links.index', compact('links'));
});
Route::get('create', function () {
return view('links.create');
});
Route::post('store', function(Request $request) {
$validator = Validator::make($request->all(), [
'title' => 'required|max:255',
'url' => 'required|max:255',
'description' => 'nullable|max:255',
]);
if ($validator->fails()) {
return back()
->withInput()
->withErrors($validator);
}
$link = new Link();
$link->title = $request->title;
$link->url = $request->url;
$link->description = $request->description;
$link->save();
return redirect('/links');
});
});
在 resources/views/links
文件夹下添加两个视图文件。
- 链接分享首页
index.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading"><h1>链接分享</h1></div>
<div class="panel-body">
<div class="row">
@\foreach ($links as $link)
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<div class="caption">
<h2><a href="{{ $link->url }}" target="_blank">{{ $link->title }}</a></h3>
<p>{{ $link->description }}</p>
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
- 链接创建页
create.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<h1>提交链接</h1>
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@\foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ url('links/store') }}" method="post">
{{ csrf_field() }}
<div class="form-group">
<label for="title">标题</label>
<input type="text" class="form-control" id="title" name="title" placeholder="Title" value="{{ old('title') }}">
</div>
<div class="form-group">
<label for="url">URL</label>
<input type="text" class="form-control" id="url" name="url" placeholder="URL" value="{{ old('url') }}">
</div>
<div class="form-group">
<label for="description">介绍</label>
<textarea class="form-control" id="description" name="description" placeholder="description">{{ old('description') }}</textarea>
</div>
<button type="submit" class="btn btn-default">创建</button>
</form>
</div>
</div>
@endsection
至此,一个简易的链接分享网站完成!
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
@\foreach ($links as $link)
foreach 是函数为什么加命名空间\
@mingyun 这是网站的一个 BUG,如果我直接使用 @foreach,就变成 @ 一个人了?很尴尬 :(
php要7.1的?