【PHP】Largon 快速部署 Laravel 项目
# 引言#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。
[]
# 安装Largon
Largon的最大缺点是**只能支持Windows用户使用**,我们只需要到官网下载exe安装包,一路下一步就可以了。
官网地址:(https://laragon.org/download/)
# 访问数据库
默认数据库是 Laragon,用户名是 **root**,密码是 **空字符串**,点击「打开」按钮,就可以访问这个默认的数据库:
![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20221121150625.png)
进入到数据库连接界面:
![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20221121150632.png)
配置完成即可。
![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20221121150813.png)
Largon安装之后就可以立即初始化Laravel项目。
# 快速构建Laravel项目
Windows系统在界面的右下角右击图标,然后根据下面的提示自动构建项目即可。
![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20221121152738.png)
构建项目之后可以使用:(http://laravel.test/)。
当然如果不喜欢Largon自己擅自动了配置,使用默认的方式可以比如 (http://localhost/laravel/public/) 访问可以直接看到相关的资源链接。
# 简单了解Laravel框架入口流程
个人对于PHP基本是一窍不通,这里翻阅到一篇社区的文档,这篇文章介绍了访问Public下的`index.php`加载过程,也就是框架是如何进行初始化和引导的。
(https://learnku.com/articles/16255/lararel-framework-execution-flow-detailed-explanation-1-entry-file)
大致的导入过程如下:
1. 表面入口为`public/index.php`,内部代码引入了 `bootstrap` 目录下的 `app.php`。
2. 通过核心的kernel进行引导初始化。
3. `$app->make(Kernel::class)`是核心的启动方法。
4. 内核Kernel的主要工作:引导、处理请求、生命周期活动、获取实例。
5. Laravel完成初始化工作。
首先是进入到`app.php`文件中:
```php
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Kernel::class);
```
> `require_once` 意思是如果对应的文件不存在会报错,`require_once` 语句和 `**require**` 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
接着我们可以看到Laravel的Kernel内核类,我们查看它的类定义:
```php
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`找不到对应配置就会存在报错的情况。
![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20221121152112.png)
构建完成之后,如果看到下面的内容,说明正确的下载并且部署项目:
```php
***** 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部署的时候遇到了下面的报错情况:
```php
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**: (https://stackoverflow.com/questions/37873586/could-not-find-package-laravel-laravel-with-stability-stable) 其中给出的提示为需要使用下面的命令:
```php
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在国内现在确实一潭死水)。
之后问题迎刃而解:
```php
composer config -g repo.packagist composer https://packagist.org
```
然后继续使用这个命令:
```php
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
](https://stackoverflow.com/questions/19816438/make-var-dump-look-pretty)
第一种方法适合喜欢**复制/粘贴**代码的:
```php
echo '<pre>' . var_export($data, true) . '</pre>';
```
第二种方法可以给部分内容实现高亮:
```php
highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");
```
当然还有其他人给出了更简洁的写法。效果是差不多的:
```php
var_dump(highlight_string("<?\n". var_export($data, true)));
```
![简洁写法](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/20221121162429.png)
第三种方法适合使用原汁原味的`var_dump`的开发人员,可以利用`<pre>`标签自带的`print_r()`方法优化:
```php
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 ... ?>`这样的代码块内才可以生效。
顺带放一手老外的吐槽:
```php
Damn! 15 years I've been working with PHP and I'm only seeing this now???
```
如果读者对此感兴趣,下面是可以直接复制粘贴到 `public\index.php` 进行调试查看Kernel内部熟悉的方法:
```php
// 第一种方法适合喜欢复制/粘贴代码的
// 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中部署也更为简单。 这个没用过,感觉和PhpStudy差不多 但有时候依赖需要Linux环境才可以安装使用,我就开始使用Homestead了 这是给新手用的吗?环境使用docker,安装laravel 使用 composer 都是很快的事了
页:
[1]