我想编写一个使用eden库的邮件部分的应用程序。
我已经通过composer.json请求了它
"require": {
"eden/mail": "^1.0",
...但是,库似乎没有正确地自动加载,因为通过eden('mail')->smtp(...)函数调用伊甸园会导致:
PHP Fatal error: Call to undefined function Kopernikus\MassMailer\Service\eden() in ~/src/massmailer/src/Kopernikus/MassMailer/Service/EdenMailerFactory.php on line 20quick setup guides仅通过以下方式处理单文件方法的情况:
include('eden.php');
eden('debug')->output('Hello World'); //--> Hello World我不想添加一个巨大的库文件并手动将其包含在内。自动加载似乎运行得很好,我只需要直接使用类,而不是使用eden()函数:
use Eden\Mail\Smtp;
YourClass
{
$smtp = new Smtp(
$host,
$user,
$pass,
$port = NULL,
$ssl = false,
$tls = false
);
}自动加载似乎基本上运行得很好,因为我可以直接使用该类,而不是使用eden()函数:
use Eden\Mail\Smtp;
YourClass
{
...
$smtp = new Smtp(
$host,
$user,
$pass,
$port,
$ssl,
$tls
);
}然而,我收到了奇怪的错误,比如当我试图发送邮件时。
[Eden\Core\Exception]
Both Physical and Virtual method Eden\Mail\Smtp->_getPlainBody() 我想走作曲家的路线。
似乎我必须通过include-path选项包括一个文件或在autoload中添加一些内容,但我不确定。
如何通过composer方式加载eden mailer组件?
发布于 2015-07-06 03:31:07
这不是一个直接解决问题的方法,但我通过切换到"nette/mail"成功地绕过了这个问题。
composer remove eden/mail
composer require nette/mailSMTP通过以下方式为我工作得很好:
$options = [
'host' => 'smtp.gmail.com',
'username' => 'YOUR_ACCOUNT',
'password' => 'YOUR_PASSWORD',
'secure' => 'ssl',
];
$mailer = new Nette\Mail\MessageSmtpMailer($options);
$message = new Nette\Mail\Message();
$message->setFrom('my.mail@gmail.com');
$message->setBody('fnord');
$message->setSubject('foo');
$message->addTo(sendTo@gmail.com);
$mailer->send($message);发布于 2015-07-06 03:54:09
粗略地看一下,我确实认为任何Eden组件都不应该单独使用。
Eden似乎由一个名为eden()的工厂函数组成,该函数不能自动加载(因为它是一个函数),而且它是此框架核心的一部分-因此它不是由您使用的邮件组件提供的。即使是这个组件的测试也依赖于核心存在这一事实,而且您想要使用的SMTP类有一个默认情况下不会解析的依赖项:use Eden\System\File;,以及:class \Eden\Mail\Smtp extends \Eden\Mail\Base和class \Eden\Mail\Base extends \Eden\Core\Base。
这个伊甸园框架意味着要么完全使用,要么根本不使用。您不能从中隔离组件。
如果你需要一个邮件库,我推荐你使用https://packagist.org/packages/swiftmailer/swiftmailer。它不是框架的组件,所以您不会继承这些依赖项。
发布于 2020-03-28 14:58:48
这些调用类似于eden('debug')或eden('mail'),或者只是为其相应的Index类创建单例的快捷方式。例如:eden('mail')翻译成\Eden\Mail\Index();
这会导致:
eden('debug')->output('Hello World'); //--> Hello World
//or
$debug = new \Eden\Debug\Index();
$debug->output('Hello World');https://stackoverflow.com/questions/31232671
复制相似问题