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编程开发“虚拟域名”系统
Oct 09 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
解析PHP提交后跳转
Jun 23 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
php中session与cookie的比较
Jan 27 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
php基本函数汇总
Jul 09 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
Feb 16 PHP
PHP代码覆盖率统计详解
Jul 22 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
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
jQuery中extend函数简单用法示例
2017/10/11 jQuery
vue中倒计时组件的实例代码
2018/07/06 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python实现微信防撤回神器
2019/04/29 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
python re.match()用法相关示例
2021/01/27 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
详解HTML5中的标签
2015/06/19 HTML / CSS
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
什么是设计模式
2012/06/17 面试题
工艺工程师工作职责
2013/11/23 职场文书
成品仓管员工作职责
2013/12/29 职场文书
食品安全演讲稿
2014/09/01 职场文书
工作经历证明书范文
2014/11/02 职场文书
辞职信的写法
2015/02/27 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
小学音乐课教学反思
2016/02/18 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang