zxdsb666. 发表于 2022-12-22 09:34

【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中部署也更为简单。

逝去的初夏 发表于 2022-12-22 14:37

这个没用过,感觉和PhpStudy差不多 但有时候依赖需要Linux环境才可以安装使用,我就开始使用Homestead了

wan520340 发表于 2022-12-22 14:47

这是给新手用的吗?环境使用docker,安装laravel 使用 composer 都是很快的事了
页: [1]
查看完整版本: 【PHP】Largon 快速部署 Laravel 项目