我应该把这些代码放在Laravel中?

Chr*_*itz 1 php laravel laravel-4 mandrill

我正在使用Laravel4构建一个站点.这是我的第一个Laravel项目,所以我仍然在学习如何将所有东西放在一起以及它应该在哪里.

我刚刚将Laravel-Mandrill-Request包添加到我的网站.我能够从我的测试控制器中的方法发送电子邮件,如下所示:

public function sendMeSomething(){
    $payload = array(
        'message' => array(
            'subject' => 'Greetings!!',
            'from_email' => 'xxxx@yyyy.com',
            'to' => array(
                array('email'=>'aaaa@bbbb.com'),
                array('email' => 'cccc@bbbb.com')
                ),
            'global_merge_vars' => array( 
                array(
                    'name' => 'time', 
                    'content' => time()
                    ), 
                array(
                    "name" => "SenderName", 
                    "content" => "Chris"
                    )
                ),
            'merge_vars' => array(
                array(
                    'rcpt' => 'aaaa@bbbb.com',
                    'vars' => array(
                        array(
                            'name' => 'firstName',
                            'content' => 'Christopher'
                            )
                        )
                    ),
                array(
                    'rcpt' => 'cccc@bbbb.com',
                    'vars' => array(
                        array(
                            'name' => 'firstName',
                            'content' => 'Chris!'
                            )
                        )
                    )
                )
        ),
        'template_name' => "sk-hello",
        'template_content' => array(
            array(
                'greetings' => 'why hello!'
                )
            )
    );
    $result = Mandrill::request('messages/send-template', $payload);
    return "check your email. result: " . var_dump($result);
}
Run Code Online (Sandbox Code Playgroud)

一切都在测试中很好用,所以现在我已经准备好开始将它构建到我的实际网站工具中了.

我想通过构建一个动态构建有效负载变量的方法来抽象它.

我的问题是,放置此代码的适当位置在哪里?它似乎不应该在它自己的控制器中,因为它是一个可以从其他控制器的不同位置调用的工具.它不是仅与我的数据库中的表进行交互的东西,所以它似乎不应该是一个模型.我应该为它创建一个立面?这堂课应该去哪儿了?

Ant*_*iro 6

创建服务,假设Mailer在控制器或其他服务中以这种方式使用它:

Mailer::send('emails.greetings', 'Welcome!', $user->email);
Run Code Online (Sandbox Code Playgroud)

你会需要:

  • 您的基本服务类(Mailer.php)
  • 服务提供商(MailerServiceProvider.php)
  • 门面(MailerFacade.php)

看一下这篇文章:http://fideloper.com/create-facade-laravel-4

您可以为服务创建文件夹,如下所示:

app
?   ??? App
?       ??? Services
?            ??? Mailer
?                ??? Mailer.php
?                ??? MailerServiceProvider.php
?                ??? MailerFacade.php
Run Code Online (Sandbox Code Playgroud)

命名空间:

<?php namespace App\Services;
Run Code Online (Sandbox Code Playgroud)

并使用PSR-4通过命名空间自动加载您的类,但将其添加到您的composer.json:

"autoload": {
    "psr-4": {
        "App\\": "app/App",
    },
},
Run Code Online (Sandbox Code Playgroud)

并执行

composer dumpautoload
Run Code Online (Sandbox Code Playgroud)