2013-11-28 27 views
4

我在Contact.php模型這兩種方法:

public function getSubscribers($listId) 
{ 
    return $this->withTrashed() 
     ->where(DB::raw("concat('',email * 1)"), '!=', DB::raw('email')) 
     ->where('opt_out', '0') 
     ->select('email') 
     ->chunk(1000, function($results) use ($listId) { $this->subscribeEmails($listId, $results); }); 
} 

public function subscribeEmails($listId, $subscribers) 
{ 
    $emails = array(); 

    foreach ($subscribers as $key => $subscriber) 
    { 
     $memberActivity = $subscriber->memberActivity($listId); 

     if (! $memberActivity['data']) 
     { 
      $emails[] = array('email' => $subscriber->email); 
     } 
     else 
     { 
      foreach ($memberActivity['data'] as $data) 
      { 
       foreach ($data['activity'] as $activity) 
       { 
        if ($activity['action'] !== 'unsub') 
        { 
         $emails[] = array('email' => $subscriber->email); 
        } 
       } 
      } 
     } 
    } 

    MailchimpWrapper::lists()->batchSubscribe($listId, $emails, false, true); 
} 

而且getSubscribers()方法是通過方法調用,我AdminContactsController.php控制器所謂updateMailchimp():

public function updateMailchimp() 
{ 
    $this->contact->getSubscribers($this->listId); 

    $message = (object) array(
     'title'   => 'Excellent!', 
     'content'  => 'The Mailchimp newsletter list has been updated with the latest contacts from within the system.', 
     'alert_type' => 'success' 
    ); 

    return Redirect::back()->with('message', $message); 
} 

本地,這在所有的可升級服務器上的偉大工程,沒有問題,我得到以下錯誤引用該行cotaining - >塊(1000,函數($結果)使用( $ listId){$ this-> subscribeEmails($ listId,$ results);});:

Using $this when not in object context 

這是PHP版本的問題還是我在這裏丟失了一些東西?

+0

你能否告訴我們,該行究竟你在收到此錯誤? – matewka

+0

是啊,它的 - >塊(1000,函數($結果)使用($ listId){$ this-> subscribeEmails($ listId,$ results);}); –

回答

2

您的代碼在localhost上運行但不在遠程服務器上的原因可能是PHP版本的差異。在PHP 5.4.0之前it is not possible to use $this from anonymous function。你必須通過use關鍵字中提及$this

public function getSubscribers($listId) 
{ 
    $that = $this; // <---- create reference to $this 
    return $this->withTrashed() 
     ->where(DB::raw("concat('',email * 1)"), '!=', DB::raw('email')) 
     ->where('opt_out', '0') 
     ->select('email') 
     ->chunk(1000, function($results) use (&$that, $listId) { $this->subscribeEmails($listId, $results); }); 
} 
+0

是的,在Laravel聊天中的anlutro讓我走上了正確的軌道,這是正確的答案。乾杯兄弟。 –

相關問題