在我们可以使用 composer 安装 PHP 项目中需要的东西之前,我们需要下载并运行安装文件。
为此,建议按照此页面上的官方说明进行操作:
https://getcomposer.org/download/
安装文件 composer-setup.php 确保 php.ini 配置正确,如果没有,则会提醒我们。
它还下载一个文件 composer.phar ,它应该被移动到 ~/.local/bin。
在移动 .phar 文件时,我们还将其重命名为 composer ,因为不需要扩展名。
mv composer.phar ~/.local/bin/composer
把composer放在这个位置可以让我们不用sudo就可以使用composer,非常方便。
~/.local/bin/位置也可用于我们自己的自定义脚本和二进制文件。
使用 composer 安装东西
现在,要安装某些东西,我们可以导航到项目目录以使其更容易;如果我们使用的是典型的 Apache 虚拟主机 (vhost) 设置,这可能可以通过键入以下内容来完成:
cd /var/www/MyProjectName/
在项目根目录中,我们现在可以尝试安装 PHPMailer(不带 sudo):
composer require phpmailer/phpmailer
这将在项目的根目录中创建 vendor 目录; vendor 目录将包含所有依赖项,例如 PHPMailer,这些依赖项是与 composer 一起安装的。
使用自动加载器,我们可以像这样使用刚刚安装的依赖项:
//index.php //Composition Root // define('BASE_PATH', rtrim(preg_replace('#[/\\]{1}#', '/', realpath(dirname(__FILE__))), '/') . '/'); require BASE_PATH . 'vendor/autoload.php'; //PHPMailer Object $mail = new PHPMailer\PHPMailer\PHPMailer(); $mail->addAddress("someone@example.com", "FirstName LastName"); //...
使用自动加载器包含来自vendors的依赖项
可能由于经过验证的文档,安装过程并不总是顺利。
依赖项安装为 [供应商名称]/[项目名称] ;在 PHPMailer 的情况下,它变成 PHPMailer/PHPMailer——记住这一点很重要,因为它指的是我们在自动加载时需要的命名空间。
我不确定为什么我们不能像一些教程中提到的那样编写 new PHPMailer()...。
据推测,composer 自动加载器应该能够自动处理命名空间,但情况似乎并非如此。
相反,我们必须通过编写完整的命名空间来包含依赖项:
$mail = new PHPMailer\PHPMailer\PHPMailer();
这不必要地复杂,而且看起来很奇怪。
除了这样做,我们还可以依赖组合根目录顶部的 use 语句(即:index.php):
use PHPMailer\PHPMailer\PHPMailer; $mail = new PHPMailer();
这仍然有点不方便,但至少我们可以用 use 语句制作一个单独的文件,然后在需要的地方包含它。
另一个问题是,由于文档太差,很难知道给定依赖项的确切名称空间/路径,而且我还没有找到一个简单的解决方案。
现在,我们可能会查看文件本身以确定我们需要编写什么来包含它。
请记住:自动加载(autoloading)的目的是避免编写所有的 require 和 include 语句;大多数情况下,我们仍然需要写出命名空间。