Ho sbagliato a non essere d'accordo con A Gentle Introduzione alle best practice sui modelli di symfony? [chiuso]

3

Attualmente sto imparando symfony e sto esaminando il libro A Gentle Introduction to symfony e ho trovato questa sezione in "Capitolo 4: Nozioni di base sulla creazione di pagine" sulla creazione di modelli (o viste):

"Se hai bisogno di eseguire qualche codice PHP nel template, dovresti evitare di usare la consueta sintassi PHP, come mostrato nel Listato 4-4. Invece, scrivi i tuoi template usando la sintassi alternativa di PHP, come mostrato nel Listato 4- 5, per mantenere il codice comprensibile per i programmatori non PHP. "

Listato 4-4 - La sintassi PHP usuale, buona per le azioni, ma cattiva per i modelli

<p>Hello, world!</p>
<?php
if ($test) {
   echo "<p>".time()."</p>";
} 
?> 

(La cosa ironica su questo è che l'istruzione echo apparirebbe ancora meglio se il tempo fosse una variabile dichiarata nel controller perché allora potresti semplicemente incorporare la variabile nella stringa invece di concatenare)

Listato 4-5 - La sintassi PHP alternativa, buona per i modelli

<p>Hello, world!</p> 
<?php if ($test): ?>
    <p><?php echo time(); ?>
</p><?php endif; ?>

Non vedo come l'elenco 4-5 renda il codice "comprensibile per i programmatori non PHP" e la sua leggibilità sia alquanto instabile. 4-4 sembra molto più leggibile per me. Ci sono programmatori che usano symfony che scrivono i loro template come quelli in 4-4 anziché in 4-5? Ci sono dei motivi per cui dovrei usarne uno sull'altro? C'è la possibilità molto sottile che da qualche parte lungo la strada qualcuno meno tecnico possa modificarlo come modello, ma in che modo 4-5 lo rende effettivamente più comprensibile per loro?

    
posta AndrewKS 07.01.2011 - 21:32
fonte

6 risposte

6

Il secondo esempio usa plain html e penso che sia più comprensibile se includi grandi blocchi di html (ad esempio un modulo di login se l'utente non ha effettuato l'accesso) e solo pochissimi valori dalle funzioni php.

In questo esempio molto piccolo non mostra, penso, e preferirei puro html per cose più piccole come le singole celle con pochissimo html.

    
risposta data 07.01.2011 - 21:43
fonte
3

Questo è completamente soggettivo. 'Più comprensibile' dipende dalla persona che sta leggendo. Utilizza qualsiasi forma tu pensi sia la migliore.

    
risposta data 07.01.2011 - 21:40
fonte
2

NO, non hai torto a non essere d'accordo. Gli scrittori di libri non sono dei! A quel tempo, l'autore avrebbe potuto pensare che quella era una convenzione migliore, ma ovviamente era solo la sua opinione.

    
risposta data 07.01.2011 - 22:23
fonte
2

Uso il secondo semplicemente perché editor di testo e IDE comprendono l'html . Se mi manca un tag di chiusura, l'editor mi informerà. Se stampo semplicemente l'html come stringa, non lo farò.

In realtà non ho un'opinione al riguardo.

    
risposta data 08.01.2011 - 04:18
fonte
1

Trovo che la sintassi nella Figura 4-5 sia di gran lunga superiore alla prima. Quando si considerano esempi più grandi e più complicati, la prima sintassi diventerà piuttosto confusa. La sintassi di Figura 4-5 consente ai progettisti che hanno familiarità con HTML e non con php può lavorare facilmente con il tuo codice.

Un designer non ha bisogno di sapere come si ottengono i dati dal database e come lo si modifica per la visualizzazione, vogliono solo vedere i tag html. Questo va al di là delle preferenze personali su quale sintassi è più facile da capire. Se si segue l'architettura MVC, l'applicazione dovrebbe visualizzare il suo contenuto indipendentemente da dove provengono i dati e come viene elaborato.

Elenchi da 2-1 a 2-5 nel capitolo due di La guida definitiva a symfony mostra questo molto bene.

Il listato 2-3 è molto più semplice per un designer con cui lavorare rispetto al Listato 2-1. Non contiene alcun codice utilizzato per recuperare i dati visualizzati.

Elenco 2-3:

<html>
  <head>
    <title>List of Posts</title>
  </head>
  <body>
    <h1>List of Posts</h1>
      <table>
        <tr><th>Date</th><th>Title</th></tr>
         <?php foreach ($posts as $post): ?>
           <tr>
            <td><?php echo $post['date'] ?></td>
            <td><?php echo $post['title'] ?></td>
           </tr>
         <?php endforeach; ?>
     </table>
   </body>
 </html>

Elenco 2-1:

<?php

// Connecting, selecting database
$link = mysql_connect('localhost', 'myuser', 'mypassword');
mysql_select_db('blog_db', $link);

// Performing SQL query
$result = mysql_query('SELECT date, title FROM post', $link);

?>

<html>
  <head>
    <title>List of Posts</title>
  </head>
 <body>
   <h1>List of Posts</h1>
     <table>
       <tr><th>Date</th><th>Title</th></tr>
        <?php
          // Printing results in HTML
          while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
          {
            echo "\t<tr>\n";
            printf("\t\t<td> %s </td>\n", $row['date']);
            printf("\t\t<td> %s </td>\n", $row['title']);
            echo "\t</tr>\n";
          }
        ?>
      </table>
    </body>
  </html>

// Closing connection
mysql_close($link);

>?

    
risposta data 08.01.2011 - 03:23
fonte
0

C'è una terza sintassi generale, che ho sempre trovato la più leggibile:

<p>Hello, world!</p> 
<?php if ($test) { ?>
    <p><?= time(); ?></p>
<?php } ?>
  • Non mischiare echo e printf con l'attivazione / disattivazione di php tramite ?>foo<?php - è molto più difficile separare mentalmente l'output dal codice.
  • Contrariamente ai consigli popolari, mantieni { parentesi graffe } . Li trovo molto più facili da vedere quando cerco l'inizio e la fine dei blocchi di codice.
  • Utilizza i tag brevi se disponibili: <?= è identico a <?php echo . Riduce la quantità generale di ingombro e, a partire da PHP 5.4, non può essere disabilitato.
    • Sebbene echo non sia un concetto così difficile, riduce anche la quantità di PHP che un progettista di modelli potrebbe dover conoscere.
  • Un problema che ho con il formato HTML: ho spostato il% co_de di chiusura sulla riga sopra di esso. Ora la fine dell'istruzione </p> ha lo stesso rientro all'inizio.
risposta data 13.04.2012 - 21:06
fonte

Leggi altre domande sui tag