Laravel大型项目系列教程(三)之发表文章


一、前言

上一节教程中完成了用户管理,这节教程将大概完成发表Markdown格式文章并展示的功能。



二、Let's go

1.数据库迁移

文章模块中我们需要建立articlestags以及article_tag表,每篇文章会有一到多个标签,每个标签会有一到多篇文章,创建迁移文件:

$ php artisan migrate:make create_articles_table --create=articles
$ php artisan migrate:make create_tags_table --create=tags
$ php artisan migrate:make create_article_tag_table --create=article_tag

修改*_create_articles_table.php

Schema::create('articles', function(Blueprint $table)
{
    $table->increments('id');
    $table->string('title');
    $table->string('summary')->nullable();
    $table->text('content');
    $table->text('resolved_content');
    $table->integer('user_id');
    $table->softDeletes();
    $table->timestamps();
});

修改*_create_tags_table.php

Schema::create('tags', function(Blueprint $table)
{
    $table->increments('id');
    $table->string('name')->unique();
    $table->integer('count')->default(0);
    $table->softDeletes();
    $table->timestamps();
});

修改*_create_article_tag_table.php

Schema::create('article_tag', function(Blueprint $table)
{
    $table->increments('id');
    $table->integer('article_id');
    $table->integer('tag_id');
});

执行迁移:

$ php artisan migrate

2.创建Article和Tag模型

创建ArticleTag模型:

$ php artisan generate:model article
$ php artisan generate:model tag

先在User.php中增加:

public function articles()
{
    return $this->hasMany('Article');
}

一个用户会有多篇文章。

修改Article.php

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Article extends \Eloquent {

    use SoftDeletingTrait;

    protected $fillable = ['title', 'content'];

    public function tags()
    {
        return $this->belongsToMany('Tag');
    }

    public function user()
    {
        return $this->belongsTo('User');
    }
}

一篇文章会有多个标签并属于一个用户。

修改Tag.php

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Tag extends \Eloquent {

    use SoftDeletingTrait;

    protected $fillable = ['name'];

    public function articles()
    {
        return $this->belongsToMany('Article');
    }
}

一个标签会有多篇文章。

上面用到了软删除,belongsToMany用于多对多关联。

3.发表文章视图

首先在导航条nav.blade.php中添加一个发表文章的选项:

  •  Publish Article

  • 这时候登录会发现多了一个选项:

    下面创建视图:

    $ php artisan generate:view articles.create

    修改articles/create.blade.php

    @extends('_layouts.default')
    
    @section('main')
    
      
          

    Publish Article

          
        @if ($errors->has())            

    {{ $errors->first() }}

        
        @endif     {{ Form::open(array('url' => 'article', 'class' => 'am-form')) }}                    Title