为了账号安全,请及时绑定邮箱和手机立即绑定

我第一次安装Laravel的经历

标签:
PHP laravel

有时候,尤其是在刚开始工作时,你会觉得尽管你按照指示来做,却好像没有进步——而别人都觉得这很容易。

这确实会让人感到非常沮丧,我想描述一下即使过了几十年后,我仍然会遇到类似的问题。所以我在这里尝试详细记录我在尝试解决问题时的各种失败和失误。这是我的第一篇相关文章,但我希望以后能写更多类似的分享。

我们来学学 Laravel 吧。

Laravel 力求提供出色的开发体验,
无论你是 PHP web 框架的新手还是拥有多年经验的老手,

Laravel 被誉为“开发者的框架”,尤其是在 PHP 社区中,因为它比其他框架更简朴,并且采取了简单而严谨的架构设计。我之前接触过一些其他的 PHP 框架——Drupal 7、Drupal 8+、Symfony、WordPress、Concrete5、PrestaShop、CodeIgniter 等,所以我并不是毫无准备地进入这个领域。

我会从一台最基础的笔记本电脑开始,看看能做些什么。

安装先决条件(简要:问题:无,信心:满分)

在创建你第一个 Laravel 应用之前,请确保你的本地机器上安装了 PHP、Composer 和 Laravel 安装器。此外,你需要安装 Node 和 NPM 或者 Bun,以便编译前端资源。

好的。没问题。我会用 apt install 安装一些 PHP,从 getcomposer.org 下载 Composer,然后弄清楚如何安装 Laravel 安装器。我的发行版似乎自带了 Node 22,或者我在之前设置其他东西时已经安装了它,这样应该就都搞定了。

$ composer global require laravel/installer

砰!搞定。目前还没有遇到问题,我们开局不错,信心空前高涨。

创建一个新的Laravel项目(注意:有些问题,信心:高)

$ laravel new example-app
zsh: 找不到命令: laravel

哦,也许我得再看看那份过分的自信了。

看来composer并没有把任何东西安装到常规的二进制路径里,而且composer安装程序也没有做任何事情来将自己的路径添加到系统路径里。以前我从未遇到过这种情况,因为我直接从它们出现的路径运行composer安装的二进制文件,无论是哪个路径。比如,对于Drupal,有vendor/drush/drush/drushvendor/bin/drush,这取决于你使用的版本。我需要为自己创建一个符号链接或别名,还是需要找到laravel二进制文件在composer添加它的位置?

不知道,我得找找这个。

我在 Stack Overflow 上找到了一些线索:你可以使用 composer global config bin-dir --absolute 这个命令来找到 composer 的二进制目录,在 composer 的现代版本中,所有可执行命令都会被放置在该目录下,而不是迷失在层级结构中。这样就不用担心找不到命令了。

好的,我可以在我的启动脚本里加点东西,把路径加进去……不过那个命令不只是生成路径……

$ composer global config bin-dir --absolute
当前目录变更为 /home/moopet/.config/composer
这是 /home/moopet/.config/composer/vendor/bin

... 而且我不能将整个字符串当作目录来使用。也许我需要使用 tail 来获取最后一行,或者其他工具。等等,还有一个 SO 回答中的评论提到了使用 --quiet 标志。这个标志是用来干什么的?我来试试 composer --help

用法如下:
list [选项或参数] [--] [<命名空间或名称>]
注:<namespace> 可以是命名空间或名称。

结果在仅运行 composer 命令时,实际上给出了关于 list 命令的帮助信息,而不是 composer 本身。这让我困惑了好一会儿。

-q --安静模式:不显示任何消息

嗯,这听上去好像没啥用!我们需要点实际的输出。还有啥别的没?

--raw 输出原始命令列表
--format=FORMAT 输出格式 (txt、xml、json、或 md) [默认为: "txt"]

这可能是这些里的一个吧?

“--raw” 选项没有,和“--format” 选项也没有。

果然,这些是 list 的选项,而不是通用的参数。

让我们用 --quiet 运行一下,就当是为了好玩和闹着玩,随便玩玩。

$ composer 全局配置 命令 bin-dir --绝对路径 --静默
/home/moopet/.config/composer/vendor/bin

嗯,还真没想到,竟然成功了。但是文档做得真的很差。

我会把它加到我的 shell 启动脚本里面,并加上一小段防护代码,这样我们就可以继续了。

如果存在命令 `composer`,则
  export PATH=$(composer global config bin-dir --absolute --quiet):$PATH

全屏模式 退出全屏

创建一个新的 Laravel 项目,第二部分(问题:挺多一些问题——信心:不太确定)

这次当我运行 laravel new example-app 时,它会提示我一些问题。因为我还没读到文档的相关部分,所以我就选择了默认选项,除了选择启动套件。我选择了'Breeze',因为文档中就是这样建议的。

直到一切都挺好的,直到出现问题。

  • composer.json 根节点的要求是 laravel/pint ^1.0,可以通过 laravel/pint 的 v1.0.0, v1.1.0, v1.1.1 版本来满足。
  • laravel/pint 的 v1.0.0 到 v1.1.1 版本需要 ext-xml 扩展,请确保你还没有在系统中安装或启用 PHP 的 xml 扩展。

等会儿,PHP 需要 XML 扩展?这从没列为需求。好的,我快速安装一下 apt install php-xml

好了,都装好了。我再试试安装。

执行 laravel new example-app
在 NewCommand.php 的第 789 行:
提示:应用程序已经存在!

哎。

所以安装程序进行了一部分,因为没有验证依赖项而中途失败了,应用程序现在处于损坏状态。这迹象不太好。Laravel是第几版,是11版本吗?

《怪奇物语》中的一帧静止画面,Elle躲在墙后面。字幕上写着,

他们现在肯定已经有一些基本的需求检查了吧?哦好吧,我执行 rm -r example-app,然后重新开始,还没有真正开始,所以也没什么损失。

简单说来,可能是DOM扩展、XML扩展,或是cURL扩展。

  • phpunit/phpunit[11.0.1, ..., 11.4.3] 需要 PHP 的 dom 扩展,但你的系统中未安装。请安装或启用 PHP 的 dom 扩展。
  • 根 composer.json 文件要求 phpunit/phpunit ^11.0.1,满足条件的版本包括 phpunit/phpunit[11.0.1, ..., 11.4.3]。

所以我就需要安装 php-dom 吗?不是的。试试别的。再去看 Stack Overflow。结果发现我需要安装 php-curl。真是这样啊。

接着,删掉目录(用rm -r),然后重新运行一下安装向导。

设置一个新的 Laravel 项目,第三次尝试(简而言之:问题仍然存在,但最近的成功增强了信心)

它提示我选择要使用的数据库服务器是哪一个。所有选项旁边都显示“缺少PDO扩展”。

唉。

我跳出安装程序,再次删除整个目录,然后运行 apt install php8.3-mysql,因为没有直接可用的 php-pdo 包,也没有可工作的 php-mysql 别名,所以我不得不进行了一些繁琐的 apt search

Illuminate\Database\QueryException,
SQLSTATE[HY000] [2002] 连接被拒 (连接: MySQL, SQL:select 存在 (select 1 from information_schema.tables where table_schema = 'laravel_example_app' and table_name = 'migrations' and table_type in ('BASE TABLE', 'SYSTEM VERSIONED')) as 'exists')

等等,这什么情况?这个安装程序从未让我输入数据库连接信息。它正试着对啥东西运行SQL命令。这到底是怎么一回事呢?

巧的是,我局域网里另一台主机上有一个 MySQL 服务器正在运行,本来打算用它(虽然自带数据库并没有被列为 Laravel 的必备条件)。我本应该安装 SQLite 的,那样可能就没问题了,因为 SQLite 无需任何凭证。

sudo apt install php8.3-sqlite

再试试看。

用户输入:删除 example-app 目录:rm -r example-app
用户输入:使用 Laravel 创建新的 example-app 应用程序:laravel new example-app
... (省略号)

太棒了!黑客式的语气:“我进来了!”赢了!成功的宝宝。

一位可能很火的随机金发名人正努力抱着一大把奖杯。

最后

我觉得我做成了吧?

但如果有人问我这大概要花多久,根据热情的文档和良好的声誉,我会说大概20分钟。如果我是为了工作的目的来做这件事,我的项目经理会根据以往的经验将其估计时间翻倍或四倍。

花了多久时间?一个傍晚花了一个小时左右,第二天也差不多用了一个小时。我没有急着完成,但这并不简单。

而且你知道吗?我对这并不满意。它没有使用MySQL,因为安装程序的那部分似乎完全出问题了。我使用的是SQLite,但这与实际生产环境还是有些距离。所以在开始实际教程之前,待办事项清单上还有一些事情需要做。

但它确实运行了,构建过程一切顺利。

我已经准备好进入下一阶段:修复当我打开浏览器中的演示页面时,控制台中出现的错误 JsonExceptionSyntax errorProcessTimedOutException

Laravel开发服务器控制台输出,包含各种语法错误及异常

唉。

要是所有事情出厂设定就都完美该多好,不是吗?

...

  1. 大家:晚了
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消