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 相关文章推荐
怎样在PHP中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
PHP新手上路(十四)
Oct 09 PHP
php 魔术方法使用说明
Oct 20 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
php curl基本操作详解
Jul 23 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 PHP
php在linux环境中如何使用redis详解
Dec 15 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
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
python重试装饰器示例
2014/02/11 Python
python实现的希尔排序算法实例
2015/07/01 Python
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
Python猴子补丁知识点总结
2020/01/05 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
小学新教师培训方案
2014/02/03 职场文书
企业宣传标语
2014/06/09 职场文书
Nginx的基本概念和原理
2022/03/21 Servers
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫