引言

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]](https://segmentfault.com/a/11...)

安装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) 入口文件

大致的导入过程如下:

  1. 表面入口为public/index.php,内部代码引入了 bootstrap 目录下的 app.php
  2. 通过核心的kernel进行引导初始化。
  3. $app->make(Kernel::class)是核心的启动方法。
  4. 内核Kernel的主要工作:引导、处理请求、生命周期活动、获取实例。
  5. 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>]]]

StackFlowCould 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/que...
](https://stackoverflow.com/que...)

第一种方法适合喜欢复制/粘贴代码的:

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


Xander
198 声望51 粉丝