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

时间:2014-05-08 19:57:48

标签: 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);
}

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

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

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

1 个答案:

答案 0 :(得分:6)

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

Mailer::send('emails.greetings', 'Welcome!', $user->email);

您将需要:

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

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

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

app
│   └── App
│       └── Services
│            └── Mailer
│                ├── Mailer.php
│                ├── MailerServiceProvider.php
│                └── MailerFacade.php

命名他们:

<?php namespace App\Services;

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

"autoload": {
    "psr-4": {
        "App\\": "app/App",
    },
},

执行

composer dumpautoload