路由

在 learnlaravel5/app/Http/routes.php 的末尾添加以下代码:

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function()
{
Route::get('/', 'AdminHomeController@index');
});

这表示创建了一个路由组。

'prefix' => 'admin' 表示这个路由组的 url 前缀是 /admin,也就是说中间那一行代码 Route::get('/' 对应的链接不是 http://fuck.io:88/ 而是 http://fuck.io:88/admin ,如果这段代码是 Route::get('fuck' 的话,那么 URL 就应该是 http://fuck.io:88/admin/fuck

'namespace' => 'Admin' 表示下面的 AdminHomeController@index 不是在 \App\Http\Controllers\AdminHomeController@index 而是在 \App\Http\Controllers\Admin\AdminHomeController@index,加上了一个命名空间的前缀。

控制器

执行命令

php artisan make:controller Admin/AdminHomeController

得到 learnlaravel5/app/Http/Controllers/Admin/AdminHomeController.php 文件。

在 class AdminHomeController extends Controller { 上面增加一行:

use App\Page;

修改 index() 的代码如下:

public function index()
{
return view('AdminHome')->withPages(Page::all());
}

视图

新建 learnlaravel5/resources/views/AdminHome.blade.php:

@extends('app')
@section('content')
<div class="container">
  <div class="row">
    <div class="col-md-10 col-md-offset-1">
      <div class="panel panel-default">
        <div class="panel-heading">后台首页</div>
        <div class="panel-body">
        <a href="{{ URL('admin/pages/create') }}" class="btn btn-lg btn-primary">新增</a>
          @foreach ($pages as $page)
            <hr>
            <div class="page">
              <h4>{{ $page->title }}</h4>
              <div class="content">
                <p>
                  {{ $page->body }}
                </p>
              </div>
            </div>
            <a href="{{ URL('admin/pages/'.$page->id.'/edit') }}" class="btn btn-success">编辑</a>
            <form action="{{ URL('admin/pages/'.$page->id) }}" method="POST" style="display: inline;">
              <input name="_method" type="hidden" value="DELETE">
              <input type="hidden" name="_token" value="{{ csrf_token() }}">
              <button type="submit" class="btn btn-danger">删除</button>
            </form>
          @endforeach
        </div>
      </div>
    </div>
  </div>
</div>

@endsection

访问:http://localhost/learnlaravel5/public/admin

完成 Pages 管理功能

4.1 修改路由 learnlaravel5/app/Http/routes.php

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function()

{

Route::get('/', 'AdminHomeController@index');

Route::resource('pages', 'PagesController');

});

4.2 创建 learnlaravel5/app/Http/Controllers/Admin/PagesController.php

运行:

php artisan make:controller Admin/PagesController

4.3 修改 learnlaravel5/app/Http/Controllers/Admin/PagesController.php 为:

<?php namespace App\Http\Controllers\Admin;

use App\Http\Requests;  

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Page;

use Redirect, Input, Auth;

class PagesController extends Controller {

    /**
      *Show the form for creating a new resource.

      *@return Response

     */

    public function create()

    {

        return view('admin.pages.create');

    }

    /**
      *Store a newly created resource in storage.

      *@return Response

     */

    public function store(Request $request)

    {

        $this->validate($request, [

            'title' => 'required|unique:pages|max:255',

            'body' => 'required',

        ]);

        $page = new Page;

        $page->title = Input::get('title');

        $page->body = Input::get('body');

        $page->user_id = 1;//Auth::user()->id;

        if ($page->save()) {

            return Redirect::to('admin');

        } else {

            return Redirect::back()->withInput()->withErrors('保存失败!');

        }

    }

    /**

      * Show the form for editing the specified resource.

      * @param  int  $id

      * @return Response

     */

    public function edit($id)

    {

        return view('admin.pages.edit')->withPage(Page::find($id));

    }

    /**

      * Update the specified resource in storage.

      * @param  int  $id

      * @return Response

     */

    public function update(Request $request,$id)

    {

        $this->validate($request, [

            'title' => 'required|unique:pages,title,'.$id.'|max:255',

            'body' => 'required',

        ]);

        $page = Page::find($id);

        $page->title = Input::get('title');

        $page->body = Input::get('body');

        $page->user_id = 1;//Auth::user()->id;

        if ($page->save()) {

            return Redirect::to('admin');

        } else {

            return Redirect::back()->withInput()->withErrors('保存失败!');

        }

    }

    /**

      * Remove the specified resource from storage.

      * @param  int  $id

      * @return Response

     */

    public function destroy($id)

    {

        $page = Page::find($id);

        $page->delete();

        return Redirect::to('admin');

    }

}

4.4 创建视图文件

首先在 learnlaravel5/resources/views 下创建 admin/pages 两级文件夹。

然后创建 learnlaravel5/resources/views/admin/pages/create.blade.php:

@extends('app')

@section('content')

<div class="container">

  <div class="row">

    <div class="col-md-10 col-md-offset-1">

      <div class="panel panel-default">

        <div class="panel-heading">新增 Page</div>

        <div class="panel-body">

          @if (count($errors) > 0)

            <div class="alert alert-danger">

              <strong>Whoops!</strong> There were some problems with your input.<br><br>

              <ul>

                @foreach ($errors->all() as $error)

                  <li>{{ $error }}</li>

                @endforeach

              </ul>

            </div>

          @endif

          <form action="{{ URL('admin/pages') }}" method="POST">

            <input type="hidden" name="_token" value="{{ csrf_token() }}">

            <input type="text" name="title" class="form-control" required="required">

            <br>

            <textarea name="body" rows="10" class="form-control" required="required"></textarea>

            <br>

            <button class="btn btn-lg btn-info">新增 Page</button>

          </form>

        </div>

      </div>

    </div>

  </div>

</div>

@endsection

之后创建 learnlaravel5/resources/views/admin/pages/edit.blade.php:

@extends('app')

@section('content')

<div class="container">

  <div class="row">

    <div class="col-md-10 col-md-offset-1">

      <div class="panel panel-default">

        <div class="panel-heading">编辑 Page</div>

        <div class="panel-body">

          @if (count($errors) > 0)

            <div class="alert alert-danger">

              <strong>Whoops!</strong> There were some problems with your input.<br><br>

              <ul>

                @foreach ($errors->all() as $error)

                  <li>{{ $error }}</li>

                @endforeach

              </ul>

            </div>

          @endif

          <form action="{{ URL('admin/pages/'.$page->id) }}" method="POST">

            <input name="_method" type="hidden" value="PUT">

            <input type="hidden" name="_token" value="{{ csrf_token() }}">

            <input type="text" name="title" class="form-control" required="required" value="{{ $page->title }}">

            <br>

            <textarea name="body" rows="10" class="form-control" required="required">{{ $page->body }}</textarea>

            <br>

            <button class="btn btn-lg btn-info">新增 Page</button>

          </form>

        </div>

      </div>

    </div>

  </div>

</div>

@endsection