Laravel5.7框架安装与使用学习笔记图文详解


Posted in PHP onApril 02, 2019

本文实例讲述了Laravel5.7框架安装与使用。分享给大家供大家参考,具体如下:

【安装Laravel】

Composer安装:

composer create-project --prefer-dist laravel/laravel

目录结构:

Laravel5.7框架安装与使用学习笔记图文详解

网站根目录指向了/public,访问报错:

Laravel5.7框架安装与使用学习笔记图文详解

原因是并没有vendor这个文件夹,看了这篇博客https://3water.com/article/158896.htm

在根目录执行 composer update,下载了一大堆东西

完事访问一片空白,错误500......然后各种百度,各种设置目录权限:

chmod -R 777 storage/
chmod -R 777 bootstrap/cache/
chmod -R 777 vendor/

还是不行,最后查看了/storage/logs下面的日志,有报错:

Laravel5.7框架安装与使用学习笔记图文详解

少了这么一个key,再次百度,我的做法是:把根目录.env.example这个隐藏文件重命名为.env

Laravel5.7框架安装与使用学习笔记图文详解

然后根目录执行 php artisan key:generate

Laravel5.7框架安装与使用学习笔记图文详解

(参考博客:https://blog.csdn.net/qq_39479575/article/details/78495703)

终于打开了这个页面,真不容易,明天我得吃个鸡腿庆祝一下......

Laravel5.7框架安装与使用学习笔记图文详解

使用 php artisan --version 命令查看安装的Laravel版本,是最新的5.7版本 :

Laravel5.7框架安装与使用学习笔记图文详解

Laravel5.7框架安装与使用学习笔记图文详解

【一些配置】 

Laravel 所有的配置文件都放在根目录 /config 下面:

Laravel5.7框架安装与使用学习笔记图文详解

修改app.php,开启debug:

Laravel5.7框架安装与使用学习笔记图文详解

设置时区为Asia/Shanghai:

Laravel5.7框架安装与使用学习笔记图文详解

控制器目录:

Laravel5.7框架安装与使用学习笔记图文详解

视图层目录:

Laravel5.7框架安装与使用学习笔记图文详解

【初识路由】

与thinkphp相比,Laravel不能通过 /模块名/控制器名/操作名 直接访问web界面

每一个web界面都必须在 /routes/web.php 中定义一条路由规则:

Laravel5.7框架安装与使用学习笔记图文详解

默认路由配置的意思是:访问根目录(网站首页),渲染视图层的"欢迎"页面:

Route::get('/', function () {
  return view('welcome');
});

在控制器目录新建了一个IndexController.php:

<?php

namespace App\Http\Controllers;

class IndexController extends Controller
{
  public function index(){
  	return '这是首页';
  } 
}

修改首页路由:

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

再次访问首页:

Laravel5.7框架安装与使用学习笔记图文详解

项目通常会区分前后台,在tp中可以通过划分模块来实现,Laravel中同样可以用这个原理

在控制器目录下新建了两个文件夹:Index、Admin,分别作为前、后台控制器模块:

Laravel5.7框架安装与使用学习笔记图文详解

以后台Admin为例,在下面新建两个控制器Index和User

手动创建太low了,Laravel使用命令行创建控制器、Model,命名空间都自动帮你写好......

php artisan make:controller Admin/IndexController

Laravel5.7框架安装与使用学习笔记图文详解

IndexController.php:

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class IndexController extends Controller
{
  public function index(){
  	return '后台首页';
  } 
}

UserController.php:

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
  public function userlist(){
  	return '后台用户列表页';
  } 

  public function useradd(){
  	return '后台用户添加';
  } 
}

在设置路由的时候,可以通过设置路由组group,共享路由属性。如:命名空间namespace、路由前缀prefix、中间件middleware等。

路由组规则设置如下:

//在App\Http\Controllers\Admin命名空间下的控制器
Route::namespace('Admin')->group(function () {
  //后台首页
  Route::group(['prefix' => 'admin/index'], function () {
    // 首页显示
    Route::get('index', 'IndexController@index');
  });

  //后台用户
  Route::group(['prefix' => 'admin/user'], function () {
    //用户列表
    Route::get('userlist', 'UserController@userlist');

    //用户添加
    Route::get('useradd', 'UserController@useradd');
  });
});

这样就可以实现类似tp那样的 /模块名/控制器名/操作名 的访问方式:

Laravel5.7框架安装与使用学习笔记图文详解

Laravel5.7框架安装与使用学习笔记图文详解

(当然路由前缀prefix和路由名称可以随意定义,不一定要遵循tp的写法,这里只是为了清晰明了) 

【中间件】

Laravel的中间件在 /app/Http/Middleware 目录下,用于过滤HTTP请求,可以做一些字段验证、身份验证、CSRF 防护等等......

Laravel自带了一些中间件:

Laravel5.7框架安装与使用学习笔记图文详解

 例:设置一个CheckLog中间件,判断用户是否登录,如果登录了可以看用户列表页,否则跳转到首页

执行生成中间件命令:(这里和控制器一样采用前后台目录分开放的方式)

php artisan make:middleware Admin/CheckLog

Laravel5.7框架安装与使用学习笔记图文详解

 Laravel5.7框架安装与使用学习笔记图文详解

CheckLog.php中间件内容:

<?php

namespace App\Http\Middleware\Admin;
use Illuminate\Http\Request;
use Closure;

class CheckLog
{
  /**
   * Handle an incoming request.
   *
   * @param \Illuminate\Http\Request $request
   * @param \Closure $next
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    $mid = $request->cookie('mid');
    if(empty($mid)){
      return redirect('admin/index/index');
    }
    //处理请求之前执行动作
    return $next($request);
  }
}

 写好中间件之后需要注册中间件,在 /app/Http/Kernel.php 里面注册

Laravel5.7框架安装与使用学习笔记图文详解

目的是给路由分配中间件,在 routeMiddleware 属性里添加:

'admin.checklog' => \App\Http\Middleware\Admin\CheckLog::class,

Laravel5.7框架安装与使用学习笔记图文详解

修改/routes/web.php路由配置,给后台用户路由组添加中间件属性:

//后台用户
Route::group(['prefix' => 'admin/user' , 'middleware' => 'admin.checklog'], function () {
  //用户列表
  Route::get('userlist', 'UserController@userlist');

  //用户添加
  Route::get('useradd', 'UserController@useradd');
});

此时访问用户列表页,会先走中间件判断登录状态,没登录跳转到首页:

Laravel5.7框架安装与使用学习笔记图文详解

(Kernel.php中其他中间件属性:全局中间件$middleware、中间件组$middlewareGroups、中间件执行顺序$middlewarePriority) 

如果不给路由设置中间件属性,也可以在控制器的构造方法里设置中间件,可以指定或排除具体某一个操作,示例如下:

<?php

namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
  public function __construct(){
    //全部操作生效
    $this->middleware('admin.checklog');

    //仅xxx操作生效
    // $this->middleware('admin.checklog')->only('userlist');

    //除xxx操作生效
    // $this->middleware('admin.checklog')->except('useradd');
  }

  public function userlist(){
  	return '后台用户列表页';
  } 

  public function useradd(){
  	return '后台用户添加';
  } 
}

【请求 request】

获得请求,首先需要引入 Illuminate\Http\Request 类

基本使用:

<?php

namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class IndexController extends Controller
{
  public function index(Request $request){
  	$uri = '请求路径:'.$request->path();
  	$url = '请求URL:'.$request->url();
  	$method = '请求方法:'.$request->method();
  	$name = '获取请求参数:'.$request->input('name');
  	$mid = '获取cookie:'.$request->cookie('mid');
    $key = '获取session:'.$request->session()->get('key');
  	$file = '获取上传文件:'.$request->file('photo');
  	dump($uri);
  	dump($url);
  	dump($method);
  	dump($name);
  	dump($mid);
  	dump($file);

  	//验证请求路径
  	//if ($request->is('admin/*')) {
    //}

    //验证请求方法
    //if ($request->isMethod('post')) {
    //}
  } 
}

Laravel5.7框架安装与使用学习笔记图文详解

【分配数据 渲染视图】

以后台首页视图 /admin/index/index 为例:

Laravel5.7框架安装与使用学习笔记图文详解

控制器使用 view() 函数渲染视图,同时分配数据:

<?php

namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
class IndexController extends Controller
{
  public function index(){
  	//分配一个字段
  	// $name = 'lws';
    // return view('admin.index.index')->with('name',$name);

    //分配数组
  	$data = ['name' => 'lws','sex' => 'nan'];
    return view('admin.index.index', $data);

    //也可以使用php的compact函数传值
    //$name = 'lws';
    //$sex = 'nan';
    //return view('admin.index.index',compact('name','sex'));
  } 
}

视图层使用双大括号 {{ }} 获得数据:

姓名:{{$name}}<br/>
性别:{{$sex}}

 Laravel5.7框架安装与使用学习笔记图文详解

{{ $test }} 会自动调用 PHP 的 htmlspecialchars()函数防止 XSS 攻击,如果不需要转义可使用 {!! $test !!} ,例如富文本格式。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP.MVC的模板标签系统(五)
Sep 05 PHP
15种PHP Encoder的比较
Apr 17 PHP
PHP form 表单传参明细研究
Jul 17 PHP
php数字转汉字代码(算法)
Oct 08 PHP
PHP的SQL注入过程分析
Jan 06 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
Laravel框架实现发送短信验证功能代码
Jun 06 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 PHP
PHP开发API接口签名生成及验证操作示例
May 27 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 #PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 #PHP
Swoole实现异步投递task任务案例详解
Apr 02 #PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 #PHP
Linux下源码包安装Swoole及基本使用操作图文详解
Apr 02 #PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 #PHP
phpStorm+XDebug+chrome 配置详解
Apr 01 #PHP
You might like
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
探究Python中isalnum()方法的使用
2015/05/18 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
想学python 这5本书籍你必看!
2018/12/11 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
Python常用编译器原理及特点解析
2020/03/23 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
《画风》教学反思
2014/04/16 职场文书
服务宗旨标语
2014/07/01 职场文书
整改报告格式
2014/11/06 职场文书
现役军人家属慰问信
2015/03/24 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
js作用域及作用域链工作引擎
2022/07/07 Javascript