CodeIgniter: невозможно перенаправить после $ this-> email-> send () - PullRequest
2 голосов
/ 05 декабря 2011

У меня есть следующий код, который отправляет электронное письмо из опубликованной формы:

$this->load->library('email');
$config['charset'] = 'iso-8859-1';
$config['mailtype'] = 'html';
$this->email->initialize($config);

$this->email->from('info@mysite.com', 'Scarabee');
$this->email->to('info@mysite.com');
$this->email->subject('Message via website');  
$data['msg'] = nl2br($this->input->post('msg'));
$data['msg'] .= '<br><br><b>Verstuurd door:</b><br>';
if($this->input->post('bedrijf')){
 $data['msg'] .= $this->input->post('bedrijf').'<br>';
}
$data['msg'] .= $this->input->post('naam').'<br>';
$data['msg'] .= $this->input->post('adres').' - '.$this->input->post('postcode').', '.$this->input->post('gemeente').'<br>';
$data['msg'] .= $this->input->post('tel').'<br>';
$data['msg'] .= $this->input->post('email');
$message = $this->load->view('email', $data, TRUE);
$this->email->message($message);
if($this->email->send()){
$success = 'Message has been sent';
$this->session->set_flashdata('msg', $success);
redirect('contact/'.$this->input->post('lang'));
}
else{
 show_error('Email could not be sent.'); 
}

Проблема: электронное письмо отправляется с правильным форматированием (из шаблона просмотра электронной почты), но страница затем становится пустой.Например, если я попытаюсь отобразить $ message чуть ниже вызова $ this-> email-> send (), ничего не появится.Перенаправление, как я пытаюсь выше, очевидно, тоже не работает.Я что-то пропустил?Спасибо за любую помощь ...

Обновление

Отследил проблему до функции внутри /system/libraries/Email.php (библиотека электронной почты CI по умолчанию).Закомментирование кода внутри этой функции позволяет отправлять почту, а также правильно перенаправлять:

protected function _set_error_message($msg, $val = '')
{
$CI =& get_instance();
$CI->lang->load('email');

if (substr($msg, 0, 5) != 'lang:' || FALSE === ($line = $CI->lang->line(substr($msg, 5))))
{
$this->_debug_msg[] = str_replace('%s', $val, $msg)."<br />";
}
else
{
$this->_debug_msg[] = str_replace('%s', $val, $line)."<br />";
}
}

Строка, которая вызвала ошибку: $ CI-> lang-> load ('email'));Пойди разберись ...

ОБНОВЛЕНИЕ 2: РЕШЕНО

У меня было это в конструкции моего контроллера:

function __construct() {
 parent::__construct();
 $this->lang = $this->uri->segment(2, 'nl');
}

Я предполагаю, что был конфликтмежду $ this-> lang и функцией _set_error_message, которая также возвращает переменную "lang" (см. var_dump ниже).

Решение: изменил $ this-> lang на $ this-> language , и все стало просто невероятно!

Думаю, что я опубликую ответ здесь, если кто-нибудь ещепостоянно теряет волосы с похожей проблемой: -)

Ответы [ 3 ]

1 голос
/ 05 декабря 2011

Вероятно, возникает ошибка, когда вы пытаетесь отправить электронное письмо, которое затем убивает ваш скрипт во время выполнения.Проверьте журналы ошибок Apache и PHP (/ var / log / apache /) и включите полный отчет об ошибках.

0 голосов
/ 13 октября 2015
$ref2 = $this->input->server('HTTP_REFERER', TRUE);
redirect($ref);

С помощью приведенного выше кода вы можете перенаправить на саму текущую страницу и вы можете установить свое флэш-сообщение выше функции перенаправления.

0 голосов
/ 05 декабря 2011

В целях отладки вы можете попробовать сделать следующее:

...
$this->email->message($message);
$this->email->send();
redirect('contact/'.$this->input->post('lang'));

Это должно перенаправить вас, независимо от того, отправляется ваша почта или нет (если вы все еще ее получаете, вы можете предположить, что перенаправление будет следующей вещью, которая произойдет).

Мое собственное решение выглядит так:

...
if ( $this->email->send() )
{
  log_message('debug', 'mail library sent mail');
  redirect('contact/thankyou');
  exit;
}
log_message('error', 'mail library failed to send');
show_error('E-mail could not be send');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...