一步一步带你构建第一个 Laravel 项目

参考链接:https://laravel-news.com/your-first-larave...

按照步骤,你最终会创建一个简易的链接分享网站

安装 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 文件夹下添加两个视图文件。

  1. 链接分享首页 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
  1. 链接创建页 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年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 3

@\foreach ($links as $link) foreach 是函数为什么加命名空间\

6年前 评论

@mingyun 这是网站的一个 BUG,如果我直接使用 @foreach,就变成 @ 一个人了?很尴尬 :(

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!