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 相关文章推荐
来自phpguru得Php Cache类源码
Apr 15 PHP
PHP Array交叉表实现代码
Aug 05 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php遍历数组的方法分享
Mar 22 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
php生成随机颜色方法汇总
Dec 03 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
php读取csv文件并输出的方法
Mar 14 PHP
php通过smtp邮件验证登陆的方法
May 11 PHP
php字符集转换
Jan 23 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 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通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
重新认识php array_merge函数
2014/08/31 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
js 分栏效果实现代码
2009/08/29 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
Python中非常实用的一些功能和函数分享
2015/02/14 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
Python的形参和实参使用方式
2019/12/24 Python
python类共享变量操作
2020/09/03 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
python3中确保枚举值代码分析
2020/12/02 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
公积金转移接收函
2014/01/11 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis