引言
php
Largon部署Laravel非常简单,只要对于PHP的一些组件进行相关了解即可。
Largon的bin组件介绍
- Apache:老牌Web服务器
- Cmder:命令行工具(Windows下的终端模拟器)
- Composer:PHP 包管理器
- Git:分布式版本控制软件
- HeidiSQL:免费的数据库管理工具(支持MySQL、MSSQL、Postgres)
- Laragon:管理开发环境提供的工具/服务的平台
- Memcached:老牌缓存系统
- MySQL:最流行的开源数据库系统
- Nginx:高性能Web服务器
- Ngrok:安全的内网穿透利器(外网访问内网站点)
- Node.js:能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript 运行环境
- Notepad++:支持各种编程语言的文本编辑器
- PHP:包含最新稳定版本的PHP
- PuTTY:一个免费小巧的SSH客户端
- Redis:可以持久化的键值对存储系统(可用于实现缓存、NoSQL、队列等)
- Sendmail:邮件发送代理软件
- Telnet
- WinSCP:免费的SFTP&FTP客户端
- Yarn:NPM 包管理器
largon部署Laravel的一些优点
- 美化 URL:使用
app.test
替代 localhost/app
- 可移植:可以任意移动 Laragon 目录(不同磁盘、不同电脑、或者云服务)
- 与系统隔离:Laragon 提供了一个与操作系统隔离的环境,从而保持了系统的干净
- 简易易用:Laragon 会自动为你完成复杂的底层配置,你可以轻松地在不同版本的 PHP、Python、Java、MySQL、Nginx、MongoDB 等软件间切换
- 现代&功能强大:基于现代化的软件架构设计,从而适用于构建现代化的 Web 应用,很多日常琐碎都可以一键帮你搞定。
了解Largon
Largon在过去的一篇英文博客介绍过,这里不再单独介绍Largon。
How to develop locally a Laravel app using Laragon
安装Largon
Largon的最大缺点是只能支持Windows用户使用,我们只需要到官网下载exe安装包,一路下一步就可以了。
官网地址:https://laragon.org/download/
访问数据库
默认数据库是 Laragon,用户名是 root,密码是 空字符串,点击「打开」按钮,就可以访问这个默认的数据库:
进入到数据库连接界面:
配置完成即可。
Largon安装之后就可以立即初始化Laravel项目。
快速构建Laravel项目
Windows系统在界面的右下角右击图标,然后根据下面的提示自动构建项目即可。
构建项目之后可以使用:http://laravel.test。
当然如果不喜欢Largon自己擅自动了配置,使用默认的方式可以比如 http://localhost/laravel/public/ 访问可以直接看到相关的资源链接。
简单了解Laravel框架入口流程
个人对于PHP基本是一窍不通,这里翻阅到一篇社区的文档,这篇文章介绍了访问Public下的index.php
加载过程,也就是框架是如何进行初始化和引导的。
Lararel 框架执行流程详解(1) 入口文件
大致的导入过程如下:
- 表面入口为
public/index.php
,内部代码引入了 bootstrap
目录下的 app.php
。
- 通过核心的kernel进行引导初始化。
$app->make(Kernel::class)
是核心的启动方法。
- 内核Kernel的主要工作:引导、处理请求、生命周期活动、获取实例。
- Laravel完成初始化工作。
首先是进入到app.php
文件中:
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Kernel::class);
require_once
意思是如果对应的文件不存在会报错,require_once
语句和 **require**
语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
接着我们可以看到Laravel的Kernel内核类,我们查看它的类定义:
interface Kernel
{
/**
* Bootstrap the application for HTTP requests.
* 为HTTP请求提供应用程序。
* @Return void
*/
public function bootstrap();
/**
* Handle an incoming HTTP request.
* 处理一个http请求
* @Param \Symfony\Component\HttpFoundation\Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function handle($request);
/**
* Perform any final actions for the request lifecycle.
* 执行请求生命周期的任何最终行动。
* @param \Symfony\Component\HttpFoundation\Request $request
* @param \Symfony\Component\HttpFoundation\Response $response
* @return void
*/
public function terminate($request, $response);
/**
* Get the Laravel application instance.
* 获取实例
* @return \Illuminate\Contracts\Foundation\Application
*/
public function getApplication();
}
"内核“类干了四个事情:引导、处理请求、生命周期活动、获取实例这几个关键行为。Kernel 类是在 Illuminate\Contracts\Http\Kernel
的包中,我们可以通过var_dump
或者下面的方式打印出实例化之后的内部对象属性,当然也可以阅读文章末尾一些不使用IDE或者插件优雅DEBUG方法(请看末尾"扩展:PHP的Debug技巧部分")。
提示:个人构建的laravel 项目名称就叫做 laravel,所以Largon配置为 laravel.test 。但是因为个人刚开始接触Laravel,不太清楚在哪里做了手脚
在打印结果中我们可以罗列出下面一些比较重要的属性:
- middleware
- middlewareGroups
- routeMiddleware
- app
- router
- bootstrappers
- middlewarePriority
重点看 app 属性,app 属性实际上是一个 Illuminate\Foundation\Application
的实例,这个实例包含了非常多的属性值,挑选其中主要的内容:
- loadedProviders
- bindings
- instances
- aliases
完成属性和初始化工作中,框架初始化代码会继续调用 kernel 类的 handle 方法,传入一个 request 请求,request 请求继承了 SymfonyRequest,并调用了一个 capture 方法,之后返回的值返回给 response 变量,因为内部比较逻辑复杂,整个流程基本到此为止。
这个过程比较像是Tomcat的请求处理流程,或者说大部分的Web流程大体上都是干这么几件事情,当然这些框架不是这么几句话可以讲清楚的,kernel
类做了一系列的验证,分发,处理,包括表单验证,中间件,日志记录,调用控制器,查询数据等等....
好了这里点到为止,如果想要更深入理解,可以从这里vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php
作为入口继续扩展。
常见问题
quick.app 快速创建项目失败
比较简单但是容易忽略的问题,Largon 快速构建项目实际上用的是composer,如果本地的composer --version
找不到对应配置就会存在报错的情况。
构建完成之后,如果看到下面的内容,说明正确的下载并且部署项目:
***** NOTE: Now, you can use pretty url for your awesome project :) *****
--------------------------------------------------
(Laragon) Project path: E:/adongstack/company/php/laragon/www/laravel
(Laragon) Pretty url: http://laravel.test
这里还要Largon提供更好的URL访问效果:http://laravel.test。这些都是自带的规则。
Could not find package laravel-laravel with stability stable
个人在单独使用Composer部署的时候遇到了下面的报错情况:
Creating a "laravel/laravel" project at "./test"
In CreateProjectCommand.php line 424:
Could not find package laravel/laravel with stability stable.
create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [<package> [<directory> [<version>]]]
StackFlow: Could not find package laravel-laravel with stability stable 其中给出的提示为需要使用下面的命令:
composer create-project --prefer-dist laravel/laravel test
这里提到了It's not laravel-laravel, it's laravel/laravel. ,需要注意项目的名字不要写错,最安全的方式是复制项目名称。
然而个人在这样处理之后依然报错,之后找到了这篇帖子尝试修复:
https://blog.csdn.net/weixin_42014858/article/details/113312698
个人经过排查之后发现问题出在 Composer镜像仓库问题,国内的镜像目前普遍是存在问题的,所以我们需要把镜像切换回国外(PHP在国内现在确实一潭死水)。
之后问题迎刃而解:
composer config -g repo.packagist composer https://packagist.org
然后继续使用这个命令:
composer create-project --prefer-dist laravel/laravel test
扩展:Php的Debug技巧
第一种是常用的PHP调试方法:var_dump()
,但是默认直接调用的方式可读性较差,个人对于PHP不熟悉,于是果断找谷大神搜了一波php pretty var_dump
找到下面这篇实用的文章。[
这篇文章来自强大的 StackFlow:
https://stackoverflow.com/questions/19816438/make-var-dump-look-pretty
第一种方法适合喜欢复制/粘贴代码的:
echo '<pre>' . var_export($data, true) . '</pre>';
第二种方法可以给部分内容实现高亮:
highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");
当然还有其他人给出了更简洁的写法。效果是差不多的:
var_dump(highlight_string("<?\n". var_export($data, true)));
第三种方法适合使用原汁原味的var_dump
的开发人员,可以利用<pre>
标签自带的print_r()
方法优化:
echo '<pre>';
var_dump($data);
echo '</pre>';
Note that echo
, var_export
, and highlight_string
are all php functions and need to be inside a <?php
?>
block.
注意要卸载<?php ... ?>
这样的代码块内才可以生效。
顺带放一手老外的吐槽:
Damn! 15 years I've been working with PHP and I'm only seeing this now???
如果读者对此感兴趣,下面是可以直接复制粘贴到 public\index.php
进行调试查看Kernel内部熟悉的方法:
// 第一种方法适合喜欢复制/粘贴代码的
// echo '<pre>' . var_export($kernel, true) . '</pre>';
// 第二种方法:内容高亮
//highlight_string("<?php\n\$data =\n" . var_export($kernel, true) . ";\n?>");
// 第三种方法:
// echo '<pre>';
// var_dump($kernel);
// echo '</pre>';
总结
Largon使用十分简单,Laravel的项目在Largon中部署也更为简单。