2016-07-25 16 views
0

Ich habe dieses Beispiel der großen Werke:Zustand innerhalb Variablen

$text = 'Lorem Ipsum'; 

$html = <<<HTML 
<div> 
    <span>$text</span> 
</div> 
HTML; 

Nun, wie dies den richtigen Weg zu tun, 2 zu bekommen Option ausgewählt:

$val = 2; 

$html = <<<HTML 
<select> 
    <option if ($val == 1) {echo 'selected';} >Option 1</option> 
    <option if ($val == 2) {echo 'selected';} >Option 2</option> 
    <option if ($val == 3) {echo 'selected';} >Option 3</option> 
</select> 
HTML; 
+2

Sie können Code in heredoc Literalen nicht schreiben. Sie müssen den Ergebnisstring iterativ zusammenstellen. Also einfach nach dem Zustand suchen und verketten. – zerkms

Antwort

1

Ich denke, das die Arbeit für Vorlage Motor - aber mach dir keine Sorgen, ist ziemlich einfach zu bedienen.

Das einzige, was Sie brauchen, ist vorbereitet Projekt mit composer und danach einfach eine der Vorlage-Engine zu installieren (für dieses Beispiel habe ich Latté abgeholt).

Installieren des Komponisten:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
php composer-setup.php 

nach dieser Installation Latté:

php composer.phar require latte/latte 

Und am Ende können Sie so etwas wie dies erstellen:

$latte = new \Latte\Engine; 

$latte->setTempDirectory('/path/to/tempdir'); 

$parameters['val'] = 2; 

$html = $latte->renderToString('template.latte', $parameters); 

und diese Inhalte setzen in die Datei "template.latte" im selben Verzeichnis:

<select> 
{foreach [1, 2, 3] as $key} 
    <option {if $val === $key}>Option {$key}</option> 
{/foreach} 
</select> 

Diese Lösung wird von Fachleuten aus vielen Gründen verwendet:

  1. Put-Logik und Rendering nebeneinander, nicht gemischt Dinge.
  2. Alle Variablen werden entkam automatisch
  3. DRY (XSS zu vermeiden) (Do not Repeat Yourself) principe, sollte diese Zeile mit der Option nur einmal
  4. Sie

BTW immer verwenden sollten in Bedingung triple equals geschrieben werden PHP (vergleicht auch den Typ der Variablen). Es ist viel sicherer und Sie können mit diesem Prinzip viel Zeit für das Debuggen sparen :-).

0

Sie haben die if Aussagen aus dem heredoc zu bewegen:

$sel1 = $sel2 = $sel3 = ''; 

    if ($val == 1) $sel1 = ' selected'; 
else if ($val == 2) $sel2 = ' selected'; 
else if ($val == 3) $sel3 = ' selected'; 

$html = <<<HTML 
<select> 
    <option$sel1>Option 1</option> 
    <option$sel2>Option 2</option> 
    <option$sel3>Option 3</option> 
</select> 
HTML; 

Sie können die if/else Leiter verkürzen durch variable variables mit:

$sel1 = $sel2 = $sel3 = ''; 

${"sel$val"} = ' selected'; 

$html = <<<HTML 
<select> 
    <option$sel1>Option 1</option> 
    <option$sel2>Option 2</option> 
    <option$sel3>Option 3</option> 
</select> 
HTML; 

Sie können verkürzen Sie auch die leeren String-Zuweisungen mit ein Array:

$sels = array_fill (1, 3, ''); 

$sels[$val] = ' selected'; 

$html = <<<HTML 
<select> 
    <option{$sels[1]}>Option 1</option> 
    <option{$sels[2]}>Option 2</option> 
    <option{$sels[3]}>Option 3</option> 
</select> 
HTML; 

Anmerkung: Die oben ist nicht getestet; Ich tippte es auf mein Handy ein.

Verwandte Themen