2016-09-08 1 views
0

С моим кодом я получаю электронные письма с телом и темой от hook_mail вместо представленных значений формы.Drupal 8 принимает форму значения по почте

В mymodule.module я реализую hook_mail, которые видят ниже:

** 
* Implements hook_mail(). 
*/ 
function contactfrancais_mail($key, &$message, $params) { 
$options = array(
    'langcode' => 'fr' 
); 

switch ($key) { 
    case 'nouveau contact': 
    $from = \Drupal::config('system.site')->get('mail'); 
    $message['subject'] ='Nouvelle message'; 
    $message['body'][] = (t('test body')); 

     break; 
} 

Тогда в моем form.php следующий представить обработчик:

/** 
    * {@inheritdoc} 
    */ 
public function submitForm(array &$form, FormStateInterface $form_state){ 

$langcode = 'fr'; 
$to = '[email protected]'; 

$mailManager = \Drupal::service('plugin.manager.mail'); 
$module = 'contactfrancais'; 
$key = 'nouveau contact'; 
$params = array(
'body' => 'test', 
'subject' => 'Website Information Request', 
); 
$send = true; 
$message['subject'] = t('nouveau contact'); 
$message['body'][] = t('test'); 

$result = $mailManager->mailç$module,$key,$to,$langcode,$params, 
NULL,$send); 
} 

Когда я ссылаться на $params значений или ссылку на $form_state значение в my hook_mail Я получаю неопределенное значение ошибки. Как я могу ссылаться на значения формы? Я пробовал с getvalue(), getValues(), $form_values, ... все с ошибками.

ответ

0

Я бы предложил незначительные изменения в вашем коде, как простое решение.

Вы можете использовать заполнители в своем теле письма и заменить на фактические значения - в своем обработчике отправки.

Измените код следующим образом:

public function submitForm(array &$form, FormStateInterface $form_state){ 
    $langcode = 'fr'; 
    $to = '[email protected]'; 

    $mailManager = \Drupal::service('plugin.manager.mail'); 
    $module = 'contactfrancais'; 
    $key = 'nouveau contact'; 
    $body_text = 'New contact: <br />{submitted_value1}<br />{submitted_value2}<br />{submitted_value3}<br />'; 

    $value1 = $form_values['submitted_value1']; 
    $value2 = $form_values['submitted_value2']; 
    $value3 = $form_values['submitted_value3']; 
    $body_text = str_replace('{submitted_value1}', $value1, $body_text); 
    $body_text = str_replace('{submitted_value2}', $value2, $body_text); 
    $body_text = str_replace('{submitted_value3}', $value3, $body_text); 
    $params = array(
     'body' => $body_text, 
     'subject' => t('nouveau contact') 
    ); 
    $send = true; 

    $result = $mailManager->mail($module,$key,$to,$langcode,$params,NULL,$send); 
} 

** 
* Implements hook_mail(). 
*/ 
function contactfrancais_mail($key, &$message, $params) { 
    $options = array(
     'langcode' => 'fr' 
    ); 

    switch ($key) { 
     case 'nouveau contact': 
     $from = \Drupal::config('system.site')->get('mail'); 
     $message['subject'] = $params['subject']; 
     $message['body'][] = $params['body']; 
     break; 
    } 
}