PHP前端开发

(我的第一次)安装 Laravel

百变鹏仔 2天前 #PHP
文章标签 Laravel

有时,尤其是当您刚刚开始职业生涯时,您似乎遵循了指示却一事无成 - 而其他人似乎发现这非常容易。

这可能非常令人沮丧,我想描述一下即使在几十年之后我也经历完全相同的事情的几种方式。所以我在这里,试图详细描述我在努力让事情顺利进行时所犯的错误和失误。这是我关于这个主题的第一篇文章,但我希望发表更多。

让我们来学习 laravel。

laravel 致力于提供令人惊叹的开发者体验 [...]无论您是 php web 框架新手还是拥有多年经验 [...]

laravel 被誉为“开发人员的框架”,至少在 php 圈子里是这样,因为它比其他框架更简单,并且需要简单而严格的架构决策。我已经完成了其他一些 php 框架 - drupal 7 、drupal 8 、symfony、wordpress、concrete5、prestashop、codeigniter 从我的脑海中浮现出来 - 所以我不打算讨论这个毫无准备。

我将从一台准系统笔记本电脑开始,看看我能走多远。

安装先决条件(tldr;问题:零,信心:最高)

在创建您的第一个 laravel 应用程序之前,请确保您的本地计算机已安装 php、composer 和 laravel 安装程序。此外,您应该安装 node 和 npm 或 bun,以便可以编译应用程序的前端资产。

好的。不是问题。我将自己安装一些 php,从 getcomposer.org 获取 composer,并弄清楚下一步如何安装“laravel 安装程序”。显然我的发行版已经安装了 node 22,或者是我之前设置其他东西时安装的,所以应该涵盖这一点。

$ 作曲家全局需要 laravel/installer

繁荣。完毕。还没有问题,我们有了一个良好的开端,信心空前高涨。

建立一个新的 laravel 项目(tldr;问题:一些,信心:高)

$ laravel 新示例应用
zsh:找不到命令:laravel

哦。也许我必须重新审视那个至高无上的信心。

因此,composer 似乎没有将任何内容安装到常规二进制路径中,并且 composer 安装程序也没有执行任何操作将自身添加到系统路径中。我以前从来没有真正面对过这个问题,因为我直接从 composer 安装的二进制文件出现的任何路径运行它们。例如,对于 drupal,有供应商/drush/drush/drush 或供应商/bin/drush,具体取决于你正在运行哪个版本。我是否需要为自己添加符号链接或别名,或者在作曲家“全局”添加的地方找到 laravel 二进制文件?

我不知道,所以我必须寻找这个。

我在 stack overflow 的答案中找到了一些线索:你可以使用 composer 全局配置 bin-dir --absolute 找到 composer 二进制目录,显然在现代版本的 composer 中,所有带有可执行命令的东西都会将其放入该目录中而不是迷失在等级制度中。

好。我可以在启动脚本中添加一些内容,将其放入我的路径中...除了该命令生成的不仅仅是路径...

$ 作曲家全局配置 bin-dir --absolute
将当前目录更改为 /home/moopet/.config/composer
/home/moopet/.config/composer/vendor/bin

...而且我不能使用整个字符串作为目录。也许我需要使用 tail 来获取最后一行,或者其他东西。等等,不,这个答案还有另一个评论,其中包括 --quiet 标志。那有什么作用?我会尝试composer --help:

用法:
列表 [选项] [--] []

嗯,呃,事实证明,在裸露的composer命令上运行--help实际上为list子命令提供了帮助,而不是composer本身。这让我困惑了一分钟。

-q --quiet 不输出任何消息

嗯,这听起来没什么用!我们想要一些输出。还有什么?

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

也许是其中之一?

“--raw”选项不存在。
“--format”选项不存在。

不。正如我所想,这些是列出的选项,而不是通用标志。

无论如何,让我们用 --quiet 来运行它,只是为了便便和搞笑:

$ 作曲家全局配置 bin-dir --absolute --quiet
/home/moopet/.config/composer/vendor/bin

嗯,你知道吗,它成功了。只是记录得很糟糕。

我将使用一些保护代码将其弹出到我的 shell 启动脚本中,然后我们可以继续:

if command -v composer >/dev/null; then  export PATH=$(composer global config bin-dir --absolute --quiet):$PATHfi

设置一个新的 laravel 项目,采取 2(tldr;问题:一些,信心:动摇)

这次 laravel 新的示例应用程序启动,并提示我一些事情。我接受默认值,因为除了入门套件之外,我还没有阅读足够多的文档来了解其中的差异。我选择“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 扩展吗?这从未被列为要求!好的,我将快速安装 php-xml。

好的,全部安装完毕。我将再次运行设置。

laravel 新示例应用程序
在 newcommand.php 第 789 行:
申请已存在!

哦。

因此,安装程序完成了一半,但由于未验证其依赖项而失败,并使应用程序处于损坏状态。这不是一个好兆头。 laravel 已经推出,什么,版本 11?

他们现在肯定已经完成了基本的前期要求检查了吗?那好吧。我只需 rm -r example-app 并重新开始,没有任何损失,因为我还没有真正开始。

长话短说1下一个缺少的依赖项是 dom 扩展,或者可能是 xml 扩展。或者也许是 curl 扩展。

- phpunit/phpunit[11.0.1, ..., 11.4.3] 需要 ext-dom * -> 您的系统中缺少它。安装或启用 php 的 dom 扩展。
- 根composer.json需要phpunit/phpunit ^11.0.1 ->可由phpunit/phpunit[11.0.1, ..., 11.4.3]满足。

所以我需要安装 php-dom 吗?不,尝试其他一些。再次堆栈溢出。原来我需要安装 php-curl。好的。

继续。 rm -r 目录并再次运行安装向导。

建立一个新的 laravel 项目,采取 3(tldr;问题:hngg,信心:仍然摇摆不定,但最近解决问题的成功得到了支撑)

它提示我使用哪个数据库服务器。他们所有人都在旁边说“缺少 pdo 扩展”。

叹息。

我退出安装程序,再次删除整个目录,apt安装php8.3-mysql,因为没有直接的php-pdo包,也没有可用的php-mysql别名,所以我做了一些烦人的apt正在寻找。

illuminatedatabasequeryexception
sqlstate[hy000] [2002] 连接被拒绝(连接:mysql,sql:选择存在(从 information_schema.tables 选择 1,其中 table_schema = 'laravel_example_app' 和 table_name = 'migrations' 和 table_type in ('base table', 'system versioned' )) 作为“存在”)

现在怎么办? 此安装程序从未要求我提供数据库的连接详细信息。它试图针对...某物运行 sql 命令。谁知道呢?

碰巧,我在 lan 中的另一台主机上运行了一个 mysql 服务器,并准备使用它(尽管我会注意到,自带数据库并未被列为 laravel 的要求)。我想我应该安装 sqlite,也许这会起作用,因为它不需要任何凭据。

sudo apt install php8.3-sqlite

再试一次。

rm -r 示例应用
laravel 新示例应用程序
...

巨大的成功。黑客的声音“我在”。为了胜利。成功的孩子。

结论

我成功了吗?我想。

但是如果有人问我这可能需要多长时间,那么基于热情的文档和声誉,我会说 20 分钟。如果我是为了工作而这样做,根据开发人员的经验估计,我的项目经理会加倍或四倍。

我真的花了多长时间?一天晚上一个小时左右,第二天一个小时左右。我并不着急,但事情并不简单。

你知道吗? 我对此不满意。它没有使用 mysql,因为安装程序的这一部分似乎完全损坏了。我正在使用 sqlite,这距离实际生产环境中发生的情况又近了一步。因此,在我开始实际教程之前,todo 列表中肯定还剩下一些事情。

但是它运行了。构建步骤声称他们顺利进行。

我已准备好进入下一阶段:修复在浏览器中打开演示页面后控制台中出现的 jsonexception、语法错误和 processtimedoutexception。

呃哦。

如果一切顺利就好了,嗯。


  1. 合唱:太晚了↩