2014-05-08 32 views
1

我正在使用Laravel4構建網站。這是我的第一個Laravel項目,所以我仍然在學習如何將所有東西放在一起以及它應該放在哪裏。我應該把這段代碼放在Laravel中?

我剛剛在Laravel-Mandrill-Request的套裝中加入我的網站。我能夠從一個方法在我的測試控制器,看起來像這樣發送電子郵件:

public function sendMeSomething(){ 
    $payload = array(
     'message' => array(
      'subject' => 'Greetings!!', 
      'from_email' => '[email protected]', 
      'to' => array(
       array('email'=>'[email protected]'), 
       array('email' => '[email protected]') 
       ), 
      'global_merge_vars' => array( 
       array(
        'name' => 'time', 
        'content' => time() 
        ), 
       array(
        "name" => "SenderName", 
        "content" => "Chris" 
        ) 
       ), 
      'merge_vars' => array(
       array(
        'rcpt' => '[email protected]', 
        'vars' => array(
         array(
          'name' => 'firstName', 
          'content' => 'Christopher' 
          ) 
         ) 
        ), 
       array(
        'rcpt' => '[email protected]', 
        '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); 
} 

一切都在測試的偉大工程,所以現在我已經準備好啓動它建設成我的實際網站的工具。

我想通過構建一個動態構建有效負載變量的方法來抽象它。

我的問題是,在哪裏將這個代碼的適當位置?它似乎不應該在它自己的控制器中,因爲它是一個將從其他控制器中的不同位置調用的工具。這不是僅僅與我的數據庫中的表交互的東西,所以它看起來不應該是一個模型。我應該爲它創建一個門面嗎?這堂課應該去哪裏?

回答

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 
+0

真棒,感謝您的建議和鏈接。這個解釋比我自己發現的很多更加清晰簡潔。還有一個問題:如果我這樣做了,我應該在哪裏放置這些文件?我應該爲它創建自己的供應商文件夾,還是應該放置其他地方? –

+0

完美!我希望我能給你第二個複選標記:) –

+0

MailerFacade.php文件應該放在名爲'Facades'的子文件夾中嗎?鏈接中的博客將Facade文件的命名空間顯示爲'namespace Fideloper \ Example \ Facades;'其他兩個文件的名稱空間爲'namespace Fideloper \ Example;'。我的網站正在查找服務提供者類,但是當我試圖從'Mailer :: sayHi()啓動測試方法時,我收到錯誤消息'Class'App \ Services \ Mailer \ MailerFacade'not found' –

相關問題