Laravel 5 框架入门(三)


Posted in PHP onApril 09, 2015

本篇教程中,我们将利用 Laravel 5 自带的开箱即用的 Auth 系统对我们的后台进行权限验证,并构建出前台页面,对 Pages 进行展示。

1. 权限验证

后台地址为 http://localhost:88/admin ,我们的所有后台操作都将在此页面或其子页面下进行。利用 Laravel 5 提供的 Auth,我们只需要改动很少部分的路由代码便可以实现权限验证功能。

首先,将路由组的代码改为:

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

{

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

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

});

上面代码中只有一处变化:给 `Route::group()` 的第一个参数(一个数组)增加了一项 `'middleware' => 'auth'`。现在访问 http://localhost:88/admin ,应该会跳转到登陆页面。如果没有跳转,也不要惊慌,从右上角退出,重新进入即可。

我们的个人博客系统并不想让人随便注册,下面我们将改动部分路由代码,只保留基本的登录、注销功能。

删掉:

Route::controllers([

 'auth' => 'Auth\AuthController',

 'password' => 'Auth\PasswordController',

]);

增加:

Route::get('auth/login', 'Auth\AuthController@getLogin');

Route::post('auth/login', 'Auth\AuthController@postLogin');

Route::get('auth/logout', 'Auth\AuthController@getLogout');

带有权限验证的最小化功能的后台已经完成,这个后台目前只管理 Page(页面)这一种资源。接下来我们将构建前台页面,把 Pages 展示出来。

2. 构建首页

先整理路由代码,将路由的最上面的两行:

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

Route::get('home', 'HomeController@index');

改成:
Route::get('/', 'HomeController@index');

我们将直接使用 HomeController 来支撑我们的前台页面展示。

此时可以删除 learnlaravel5/app/Http/Controllers/WelcomeController.php 控制器文件和 learnlaravel5/resources/views/welcome.blade.php 视图文件。

修改 learnlaravel5/app/Http/Controllers/HomeController.php 为:

<?php namespace App\Http\Controllers;

use App\Page;

class HomeController extends Controller {

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

}

控制器构造完成。

`view('home')->withPages(Page::all())` 这句话实现以下功能:

渲染 learnlaravel5/resources/views/home.blade.php 视图文件
把变量 $pages 传进视图,$pages = Page::all()
Page::all() 调用的是 Eloquent 中的 all() 方法,返回 pages 表中的所有数据。
接下来我们开始写视图文件:

首先,我们将创建一个前端页面的统一的外壳,即 `<head>` 部分及 `#footer` 部分。新建 learnlaravel5/resources/views/_layouts/default.blade.php 文件(文件夹请自行创建):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>Learn Laravel 5</title>

 <link href="/css/app.css" rel="stylesheet">

 <!-- Fonts -->
 <link href='http://fonts.useso.com/css?family=Roboto:400,300' rel='stylesheet' type='text/css'>
</head>
<body>

 <div class="container" style="margin-top: 20px;">
  @yield('content')
  <div id="footer" style="text-align: center; border-top: dashed 3px #eeeeee; margin: 50px 0; padding: 20px;">
   ©2015 <a href="http://lvwenhan.com">JohnLui</a>
  </div>
 </div>


</body>
</html>

修改 learnlaravel5/resources/views/home.blade.php 文件为:

@extends('_layouts.default')

@section('content')
 <div id="title" style="text-align: center;">
 <h1>Learn Laravel 5</h1>
 <div style="padding: 5px; font-size: 16px;">{{ Inspiring::quote() }}</div>
 </div>
 <hr>
 <div id="content">
 <ul>
  @foreach ($pages as $page)
  <li style="margin: 50px 0;">
  <div class="title">
   <a href="{{ URL('pages/'.$page->id) }}">
   <h4>{{ $page->title }}</h4>
   </a>
  </div>
  <div class="body">
   <p>{{ $page->body }}</p>
  </div>
  </li>
  @endforeach
 </ul>
 </div>
@endsection

第一行 `@extends('_layouts.default')` 代表这个页面是 learnlaravel5/resources/views/_layouts/default.blade.php 的子视图。此时 Laravel 的 视图渲染系统会首先载入父视图,再将此视图中的 @section('content') 里面的内容放入到父视图中的 @yield('content') 处进行渲染。

访问 http://localhost:88/ ,可以得到如下页面:

Laravel 5 框架入门(三)

2. 构建 Page 展示页

首先增加路由。在路由文件的第一行下面增加一行:

Route::get('pages/{id}', 'PagesController@show');

新建控制器 learnlaravel5/app/Http/Controllers/PagesController.php,负责单个 page 的展示:

<?php namespace App\Http\Controllers;

use App\Page;

class PagesController extends Controller {

 public function show($id)
 {
  return view('pages.show')->withPage(Page::find($id));
 }

}

新建视图 learnlaravel5/resources/views/pages/show.blade.php 文件:

@extends('_layouts.default')

@section('content')
 <h4>
  <a href="/">⬅️返回首页</a>
 </h4>

 <h1 style="text-align: center; margin-top: 50px;">{{ $page->title }}</h1>
 <hr>
 <div id="date" style="text-align: right;">
  {{ $page->updated_at }}
 </div>
 <div id="content" style="padding: 50px;">
  <p>
   {{ $page->body }}
  </p>
 </div>
@endsection

全部完成,检验成果:点击首页之中任意一篇文章的标题,进入文章展示页,你会看到以下页面:

Laravel 5 框架入门(三)

至此,前台展示页面全部完成,教程三结束。

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

PHP 相关文章推荐
教你IIS6的PHP最佳配置方法
Sep 05 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
symfony表单与页面实现技巧
Jan 26 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
Oct 23 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 #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
You might like
php实现ping
2006/10/09 PHP
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php 强制下载文件实现代码
2013/10/28 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
Django实现文件上传下载
2019/10/06 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
django序列化serializers过程解析
2019/12/14 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
公司部门司机岗位职责
2014/01/03 职场文书
矫正人员思想汇报
2014/01/08 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
物资采购方案
2014/06/12 职场文书
应届生找工作求职信
2014/06/24 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
西安兵马俑导游词
2015/02/02 职场文书
基于Python实现nc批量转tif格式
2022/08/14 Python