Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Eco na sintaxe heredoc/nowdoc


Eu acredito que isso é o que você pretendia fazer, é um pouco estranho:
$fn = escape($mt->from_name);
$time = escape(date("F d, Y - h:i a", strtotime($mt->st_time)));
$stc = nl2br(escape($mt->st_content));

//START EMAIL
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
TEXT
        . Input::get('rec_message') . <<<TEXT2
<br><br>

<strong>Conversation:</strong><br><br>

$fn<br>
$time<br>
$stc<br>

TEXT2
);

O início de um heredoc deve ser a última coisa em uma linha, então depois disso você desce e vai imediatamente para o bloco de texto. O fim do heredoc deve ser a única coisa na linha, então para concatená-la você tem que colocar uma linha antes de poder usar o operador (. ). Você também não precisa usar aspas ou acrescentar operadores quando estiver dentro de um heredoc.

Na verdade, é tão pouco intuitivo que até o marcador de sintaxe do StackOverflow erra, o primeiro <<<TEXT funciona bem quando eu corri isso:
$mt = new stdClass();
function escape($v){return $v;}
class User{static function sendNewTicket($a, $b, $c){echo $c;}}
class Input{static function get($a){return 'Got something';}}
$send_to = '';
$mt->from_name = 'Kitty';
$mt->st_time = '5th November';
$mt->st_content = <<<CONTENT
    Dear Judy,

        Lorem Dipsum and all that jazz.

        Toodles,
            Kitty.
CONTENT;

$fn = escape($mt->from_name);
$time = escape(date("F d, Y - h:i a", strtotime($mt->st_time)));
$stc = nl2br(escape($mt->st_content));

//START EMAIL
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
TEXT
        . Input::get('rec_message') . <<<TEXT2
<br><br>

<strong>Conversation:</strong><br><br>

$fn<br>
$time<br>
$stc<br>

TEXT2
);

Produziu:
Hello -<br><br>Got something<br><br>

<strong>Conversation:</strong><br><br>

Kitty<br>
November 05, 2014 - 12:00 am<br>
    Dear Judy,<br />
<br />
        Lorem Dipsum and all that jazz.<br />
<br />
        Toodles,<br />
            Kitty.<br>

Embora eu tenha certeza de que ficará melhor com seus dados.

Editar:E como Blizz muito corretamente aponta abaixo, se você salvar o rec_message em uma variável, você pode evitar a concatenação completamente:
$recMessage = Input::get('rec_message');
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
$recMessage
<br><br>

<strong>Conversation:</strong><br><br>

$fn<br>
$time<br>
$stc<br>

TEXT
);

Editar 2 :Com as mensagens extras, você deve usar algo assim para simplificar o email:
$messages = '';
foreach($st_messages->results() as $mt)
{

    $fn = escape($mt->from_name);
    $time = escape(date("F d, Y - h:i a", strtotime($mt->st_time)));
    $stc = nl2br(escape($mt->st_content));

    $messages .= <<<MESSAGE

$fn<br>
$time<br>
$stc<br><br>

MESSAGE;
}

$recMessage = Input::get('rec_message');
User::sendNewticket($send_to, 'Maintenance Ticket ' . Input::get('st_id'), <<<TEXT
Hello -<br><br>
$recMessage
<strong>Conversation:</strong><br><br>

$messages

Thanks,<br>
Support Team

TEXT
);
?>

Que com algum texto fictício básico produz:
Hello -<br><br>
Got something
<strong>Conversation:</strong><br><br>


Person<br>
November 11, 2014 - 12:00 am<br>
My message blah blah<br><br>

sdfasdf<br>
April 11, 2014 - 12:00 am<br>
My message asdfasdf blah blah<br><br>


Thanks,<br>
Support Team