前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【PHP】Largon 快速部署 Laravel 项目

【PHP】Largon 快速部署 Laravel 项目

原创
作者头像
阿东
发布2022-12-21 20:46:51
3K0
发布2022-12-21 20:46:51
举报

引言

#php

Largon部署Laravel非常简单,只要对于PHP的一些组件进行相关了解即可:

[compose]

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

大致的导入过程如下:

  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找不到对应配置就会存在报错的情况。

构建完成之后,如果看到下面的内容,说明正确的下载并且部署项目:

代码语言: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>]]]

StackFlowCould 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)));
简洁写法
简洁写法

第三种方法适合使用原汁原味的var_dump的开发人员,可以利用<pre>标签自带的print_r()方法优化:

代码语言:php
复制
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 ... ?>这样的代码块内才可以生效。

顺带放一手老外的吐槽:

代码语言: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中部署也更为简单。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • Largon的bin组件介绍
  • largon部署Laravel的一些优点
  • 了解Largon
  • 安装Largon
  • 访问数据库
  • 快速构建Laravel项目
  • 简单了解Laravel框架入口流程
  • 常见问题
    • quick.app 快速创建项目失败
      • Could not find package laravel-laravel with stability stable
      • 扩展:Php的Debug技巧
      • 总结
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档