首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用composer加载伊甸园?

如何用composer加载伊甸园?
EN

Stack Overflow用户
提问于 2015-07-06 00:44:10
回答 3查看 876关注 0票数 2

我想编写一个使用eden库的邮件部分的应用程序。

我已经通过composer.json请求了它

代码语言:javascript
复制
 "require": {
    "eden/mail": "^1.0",
    ...

但是,库似乎没有正确地自动加载,因为通过eden('mail')->smtp(...)函数调用伊甸园会导致:

代码语言:javascript
复制
PHP Fatal error:  Call to undefined function Kopernikus\MassMailer\Service\eden() in ~/src/massmailer/src/Kopernikus/MassMailer/Service/EdenMailerFactory.php on line 20

quick setup guides仅通过以下方式处理单文件方法的情况:

代码语言:javascript
复制
include('eden.php');
eden('debug')->output('Hello World'); //--> Hello World

我不想添加一个巨大的库文件并手动将其包含在内。自动加载似乎运行得很好,我只需要直接使用类,而不是使用eden()函数:

代码语言:javascript
复制
 use Eden\Mail\Smtp;

 YourClass
 {
     $smtp = new Smtp(
         $host, 
         $user, 
         $pass, 
         $port = NULL, 
         $ssl = false, 
         $tls = false
     );
 }

自动加载似乎基本上运行得很好,因为我可以直接使用该类,而不是使用eden()函数:

代码语言:javascript
复制
 use Eden\Mail\Smtp;

 YourClass
 {
     ...
     $smtp = new Smtp(
         $host, 
         $user, 
         $pass, 
         $port, 
         $ssl, 
         $tls
     );
 }

然而,我收到了奇怪的错误,比如当我试图发送邮件时。

代码语言:javascript
复制
[Eden\Core\Exception]                                                             
  Both Physical and Virtual method Eden\Mail\Smtp->_getPlainBody() 

我想走作曲家的路线。

似乎我必须通过include-path选项包括一个文件或在autoload中添加一些内容,但我不确定。

如何通过composer方式加载eden mailer组件?

EN

回答 3

Stack Overflow用户

发布于 2015-07-06 03:31:07

这不是一个直接解决问题的方法,但我通过切换到"nette/mail"成功地绕过了这个问题。

代码语言:javascript
复制
composer remove eden/mail
composer require nette/mail

SMTP通过以下方式为我工作得很好:

代码语言:javascript
复制
    $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);
票数 0
EN

Stack Overflow用户

发布于 2015-07-06 03:54:09

粗略地看一下,我确实认为任何Eden组件都不应该单独使用。

Eden似乎由一个名为eden()的工厂函数组成,该函数不能自动加载(因为它是一个函数),而且它是此框架核心的一部分-因此它不是由您使用的邮件组件提供的。即使是这个组件的测试也依赖于核心存在这一事实,而且您想要使用的SMTP类有一个默认情况下不会解析的依赖项:use Eden\System\File;,以及:class \Eden\Mail\Smtp extends \Eden\Mail\Baseclass \Eden\Mail\Base extends \Eden\Core\Base

这个伊甸园框架意味着要么完全使用,要么根本不使用。您不能从中隔离组件。

如果你需要一个邮件库,我推荐你使用https://packagist.org/packages/swiftmailer/swiftmailer。它不是框架的组件,所以您不会继承这些依赖项。

票数 0
EN

Stack Overflow用户

发布于 2020-03-28 14:58:48

这些调用类似于eden('debug')eden('mail'),或者只是为其相应的Index类创建单例的快捷方式。例如:eden('mail')翻译成\Eden\Mail\Index()

这会导致:

代码语言:javascript
复制
eden('debug')->output('Hello World'); //--> Hello World

//or

$debug = new \Eden\Debug\Index();
$debug->output('Hello World');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31232671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档