首页 > 代码库 > Laravel5.1 搭建简单的社区(六)--发表帖子

Laravel5.1 搭建简单的社区(六)--发表帖子

首先我们先登陆我们的用户,访问/discussions/create 路由,因为这条路由在resource声明了 所以我们直接在PostsController中的create方法中直接实现逻辑就好:

    public function create()
    {
        return view(‘forum.create‘);
    }

相应的 创建create页面:

@extends(‘app‘)

@section(‘content‘)
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2" role="main">
            {!! Form::open([‘method‘=>‘post‘,‘url‘=>‘/discussions/‘]) !!}
            <!--- Title Field --->
                <div class="form-group">
                    {!! Form::label(‘title‘, ‘Title:‘) !!}
                    {!! Form::text(‘title‘, null, [‘class‘ => ‘form-control‘]) !!}
                </div>

                <!--- Body Field --->
                <div class="form-group">
                    {!! Form::label(‘body‘, ‘Body:‘) !!}
                    {!! Form::textarea(‘body‘, null, [‘class‘ => ‘form-control‘]) !!}
                </div>

                <!-- 提交 -->
                {!! Form::submit(‘提交‘,[‘class‘ => ‘btn btn-primary form-control‘]) !!}
                {!! Form::close() !!}
                <div>
                    @if($errors->any())
                        <ul class="list-group">
                            @foreach($errors->all() as $error)
                                <li class="list-group-item list-group-item-danger">{{ $error }}</li>
                            @endforeach
                        </ul>
                    @endif
                </div>
            </div>
        </div>
    </div>
@stop

我们需要一个request来指定一些规则:

class StorePostsRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            ‘title‘ => ‘required‘,
            ‘body‘ => ‘required|min:10‘,
        ];
    }
}

现在当点击提交按钮的时候会调用PostsController的store方法:

    public function store(Requests\StorePostsRequest $request)
    {
        // 取到数据
        $user_ids = [
            ‘user_id‘ => \Auth::user()->id,
            ‘last_user_id‘ => \Auth::user()->id,
        ];
        // 存入数据库
        $discussion = Discussion::create(array_merge($request->all(), $user_ids));
        // 重定向
        return redirect()->action(‘PostsController@show‘, $discussion->id);
    }

这样就完成了发布帖子的功能,但是我们发现发布帖子是需要登录进来才可以的,所以我们要用middleware来保护一下文章的增删改查方法,我们在PostsController中使用系统自带的auth中间件:

    public function __construct()
    {
        // 使用中间件 声明只有4个方法受保护
        $this->middleware(‘auth‘, [‘only‘=>[
            ‘create‘,
            ‘store‘,
            ‘update‘,
            ‘edit‘,
        ]]);
    }

为了方便,我们把退出登录的方法也写出来:

// 退出登陆
Route::get(‘/user/logout‘, ‘UsersController@logout‘);
    public function logout()
    {
        // 退出登陆
        \Auth::logout();
        // 重定向回首页
        return redirect(‘/‘);
    }

 

Laravel5.1 搭建简单的社区(六)--发表帖子