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 相关文章推荐
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
PHP进程同步代码实例
Feb 12 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
Mar 27 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
PHP共享内存用法实例分析
Feb 12 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
PHP生成随机码的思路与方法实例探索
Apr 11 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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
重置版游戏视频
2020/04/09 魔兽争霸
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
Chrome Web App开发小结
2014/09/04 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
基于python实现微信模板消息
2015/12/21 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
django用户登录和注销的实现方法
2018/07/16 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
简历中求职的个人自我评价
2013/12/03 职场文书
初中科学教学反思
2014/01/21 职场文书
优秀教师事迹简介
2014/02/02 职场文书
年级组长自我鉴定
2014/02/22 职场文书
元旦寄语大全
2014/04/10 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server