2016-07-06 68 views
1

我在解析變量時遇到問題。存儲在數據庫中的正文中解析變量的問題

我對所有類型的電子郵件像註冊,激活等

假設我想發送反饋郵件和我有存儲在數據庫中的反饋電子郵件模板動態電子郵件模板。

在它被存儲爲名稱數據庫:{{$名稱}}

但是,當我發送的電子郵件被髮送姓名:{{$名稱}},而不是實際的名稱,如名稱:約翰

以下是我的代碼:

$name = $request->get('name'); 
      $address = $request->get('address'); 
      $phone = $request->get('phone'); 
      $emailaddress = $request->get('email_address'); 
      $feedbacktext = $request->get`enter code here`('message'); 


      Mail::send('lugmety.frontend.partials.contactUsEmail', 
       [ 'name' => $name, 

       ], 
       function ($mail) 
       use ($address, $name,$phone,$emailaddress,$feedbacktext) { 
        $mail->to('[email protected]')->subject('FeedBack Form')->from($emailaddress,$name); 
       }); 

這是我的視圖,其中包含從數據庫中獲得的電子郵件模板。

<?php echo \App\EmailTemplate::where('slug','contact-us')->first()->body; ?> 

感謝您的幫助。

+0

這是不可能在laravel。我們知道,laravel在.php文件中渲染其刀片模板,而不是將其保存到「storage \ framework \ views'文件夾中。因此,如果您將某個數據庫變量(如{{$ someData}})轉換爲.php文件比<'php echo _e($ someData)?>'超出數據庫值,則它將不起作用 –

+0

所以我們必須爲每個電子郵件模板分別查看。沒有任何想法來克服這種問題@sunny kashyap –

+0

假設我保存爲格式{{name}},有沒有什麼方法可以在發送電子郵件時用實際名稱替換{{name}}。我的意思是一定有辦法。我看到pyrocms有這樣的功能。 - @ sunny kashyap –

回答

0

添加功能EmailTemplate型號

//$value is $EmailTemplate->body value 
public function getBodyAttribute($value) 
{ 
    //get value name by request function 
    $name = request()->get('name'); 

     //do your regex code to replace {{ name }} from $name in $value and update..... 

    //finaly return $value; 
    return $value; 
} 
+0

感謝您的幫助@sunny kashyap我已經想出了一個解決方案。實際上,laravel具有刀片編譯功能,可以將字符串渲染爲刀片模板。所以當我將數據庫模板存儲在數據庫中時,它解析了值,所以我們不需要爲每個模板創建視圖。下面這裏是方法 –

1
private function parsed_content($email_template, array $args = array()){ 
    $generated = \Blade::compileString($email_template); 
    ob_start() and extract($args, EXTR_SKIP); 
    try{ 
     eval('?>'.$generated); 
    }catch (\Exception $e){ 
     b_get_clean(); throw $e; 
    } 
    $content = ob_get_clean(); 
    return $content; 
} 

並存儲在數據庫中的電子郵件模板解析變量:

$emailTemplate = EmailTemplate::where('slug','contact-us')->first(); 

     $email_body = $this->parsed_content($emailTemplate, array(
      'name' => $name, 
      'address' => $address, 
      'phone' => $phone, 
      'emailaddress' => $emailaddress, 
      'feedbacktext'=>$feedbacktext 
     )); 


     $body = json_decode($email_body,true)['body']; 

以及發送電子郵件:

Mail::send([],[], 
       function ($mail) 
       use ($body,$address, $name,$phone,$emailaddress,$feedbacktext) { 
        $mail->to('[email protected]')->subject('FeedBack Form')->from($emailaddress,$name) 
        ->setBody($body,'text/html'); 
       }); 

所以沒有ne編輯每一個觀點。來源:@Is there any way to compile a blade template from a string?

+0

在這裏檢查@sunny kashyap https://github.com/TerrePorter/StringBladeCompiler和http://stackoverflow.com/questions/16891398/ –

相關問題