Mysql
 sql >> база данни >  >> RDS >> Mysql

Ехо в синтаксиса heredoc / nowdoc

Вярвам, че това е, което възнамерявахте да направите, изглежда малко неудобно:

$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
);

Началото на heredocзадължително бъде последното нещо на ред, така че след това падате и веднага отивате в текстовия блок. Краят на heredocтрябва бъде единственото нещо на реда, така че за да го свържете, трябва да пуснете ред, преди да можете да използвате оператора (. ). Също така не е необходимо да използвате никакви кавички или оператори за добавяне, когато сте вътре в heredoc.

Всъщност е толкова неинтуитивен, че дори маркерът за синтаксис на StackOverflow го прави погрешно, първият <<<TEXT работи добре, когато стартирах това:

$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
);

Произвежда:

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>

Въпреки че съм сигурен, че ще изглежда по-добре с вашите данни.

Редактиране:И като Blizz много правилно посочва по-долу, ако запазите rec_message в променлива, можете напълно да избегнете конкатенацията:

$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
);

Редактиране 2 :С допълнителните съобщения трябва да използвате нещо подобно, за да опростите имейла:

$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
);
?>

Което с някакъв основен фиктивен текст произвежда:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql избира с Where и по подразбиране, ако условието where не е налице

  2. MySQL CONCAT връща NULL, ако някое поле съдържа NULL

  3. Mysql избира няколко реда въз основа на период от време, свързан с един ред

  4. Въведете формат на дата в дд/мм/гггг чрез laravel Eloquent Model

  5. Връзка с MySQL база данни с визуализация на Visual Studio 2013