Laravel 5 框架入门(二)构建 Pages 的管理功能


Posted in PHP onApril 09, 2015

我们将改变学习路线,不再像 Laravel 4 教程那样先构建登录系统。在本篇教程中,我们将一起构建 Pages 的管理功能,尝试 Laravel 的路由和 PHP 的命名空间。

1. 路由
Laravel 中的路由,跟其他 PHP 框架一样,作用是把各种请求分流到各个控制器。

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

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

{

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

});

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

1. `'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 。

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

如果你用过 Laravel 4,会发现 Laravel 5 的命名空间规划比较怪异,这其实是一个非常大的进步。Laravel 4 其实已经全面引入了命名空间这个强大的特性,但是为了“降低学习成本”,把 路由、控制器、模型 的默认命名空间全部设置成了顶级命名空间,这个举动反而让很多人比较轻易地“上手”了 Laravel,但是在用了一段时间以后,还需要翻越一堵高墙,那就是命名空间,而且有了前面的“容易上手”的印象作为铺垫,后期的学习会更加困难。Laravel 5 把命名空间全部隔开,控制器在 `\App\Http\Controllers`,模型在 `\App`,让我们在刚上手的时候就体验命名空间分离的感觉,总体上其实是会降低学习成本的。

2. 控制器

我们可以使用 Artisan 非常方便地构建控制器:

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());

}

控制器中文文档:http://laravel-china.org/docs/5.0/controllers

控制器中涉及到了许多的命名空间知识,可以参考 PHP 命名空间 解惑。

3. 视图

新建 `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://laravel-china.org/docs/5.0/views

访问 http://fuck.io:88/admin 得到如下页面:

Laravel 5 框架入门(二)构建 Pages 的管理功能

至此,包含 路由 》 控制器 》 模型 》 视图 的整个流程都已经完成。

4. 完成 Pages 管理功能

接下来,我将记录下我实现 Pages 管理功能的过程,不再做过多的阐述。大家有问题可以直接在本文下面留言,我会及时回复。

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

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

{

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

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

});

此处增加了一条“资源控制器”,中文文档地址:http://laravel-china.org/docs/5.0/controllers#restful-resource-controllers

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

4.5 查看结果

后台首页 http://fuck.io:88/admin :

Laravel 5 框架入门(二)构建 Pages 的管理功能

新增 Page http://fuck.io:88/admin/pages/create :

Laravel 5 框架入门(二)构建 Pages 的管理功能

编辑 Page http://fuck.io:88/admin/pages/1/edit :

Laravel 5 框架入门(二)构建 Pages 的管理功能

页面上的新增、编辑、删除的功能均已经完成,并且加入了表单验证,Pages 管理功能完成!

以上所述就是本文的全部内容了,希望对大家熟悉Laravel5框架能够有所帮助。

PHP 相关文章推荐
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
php实现Linux服务器木马排查及加固功能
Dec 29 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
学习PHP Cookie处理函数
Aug 09 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
php源码的安装方法和实例
Sep 26 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 PHP
Laravel 5 框架入门(一)
Apr 09 #PHP
Smarty中的注释和截断功能介绍
Apr 09 #PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 #PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 #PHP
Laravel 5框架学习之用户认证
Apr 09 #PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 #PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 #PHP
You might like
长波有什么东西
2021/03/01 无线电
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
PHP7修改的函数
2021/03/09 PHP
实现动画效果核心方式的js代码
2013/09/27 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
前端微信支付js代码
2016/07/25 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
构建Python包的五个简单准则简介
2015/06/15 Python
Python解惑之整数比较详解
2017/04/24 Python
速记Python布尔值
2017/11/09 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python脚本开机自启的实现方法
2019/06/28 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
销售目标责任书
2014/07/23 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
常住证明范本
2015/06/23 职场文书