Pagine

venerdì 23 agosto 2013

Rigenerare il file bootstrap.cache.php in Symfony2

Capita a volte, senza soluzione di continuità, che durante lo sviluppo in Symfony2 il file boostrap.php.cache semplicemente si cancelli ottenendo un errore di questo tipo:
require_once(/xxxMIOPERCORSOxxx/app/bootstrap.php.cache): failed to open stream: No such file or directory

A quel punto risulterà impossibile usare la console di symfony (php app/console etc...)

Per rigenerarlo basta lanciare, nella cartella in cui è installata la vostra applicazione (quella dove avreste richiamato la console) questo comando (o andare nella carella che contiene il file build_bootstrap.php e eseguirlo)
php ./vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php

Spero di avervi risparmiato qualche grattacapo :)

domenica 19 maggio 2013

Gestire le Exception con try / catch in Symfony 2

Ad alla fine mi sono ritrovato a lavorare su Symfony 2 vediamo se riesco a far ripartire il blog...

Può capitare di dover gestire un'eccezione con il classico

try {
 ...
} catch (Exception $e){
 ...
}
e scoprire che non funziona.
Il problema in questo caso è il namespace, a meno di non usare il gestore di Exception di Symfony2 il modo più semplice è far riferimento non a Exception ma a /Exception, quindi il codice corretto è :
try {
 ...
} catch (/Exception $e) {
 ...
}

martedì 22 marzo 2011

Cambiare la pagina di errore 404 su Symfony

Modificare la pagina di errore 404 in Symfony è molto semplice e veloce.
  1. Creare il modulo default
    (basta creare la cartella, non è necessario alcun comando particolare)
  2. Create la sottocartella templates
  3. Creare il file error404Success.php
Per eventuali altre modifiche al modulo di default (all'azione error404 ad esempio) basta copiare nel nostro nuovo modulo il file da ridefinire prendendolo dalla cartella

sfConfig::get('sf_symfony_lib_dir')/controller/default/

dove sf_symfony_lib_dir è la cartella che contiene la libreria di Symfony.

Un esempio di contenuto della pagina può essere

<?php decorate_with('mylayout.php') ?>
<div>
<h1>Pagina non trovata</h1>
<h5>Il server ha restituito un errore 404</h5>
<div >
<p><strong>La pagina richiesta non &egrave; disponibile.</strong> 
Se hai inserito l'indirizzo url manualmente 
controlla di averlo scritto correttamente.</p>
<p>
Se invece hai raggiunto questa pagina tramite 
un'altra pagina del sito puoi:
</p>
    <ul>
      <li><a href="javascript:history.go(-1)">Tornare alla pagina precedente</a></li>
      <li><?php echo link_to('Tornare alla homepage', '@homepage') ?></li>
    </ul>
</div>
</div>

L'istruzione decorate_with è facoltativa, serve per dire a symfony quale layout usare (tra quelli nella cartella dei templates)

Per maggiori  informazioni/opzioni vedere la documentazione ufficiale alla pagina
http://www.symfony-project.org/gentle-introduction/1_4/it/19-Mastering-Symfony-s-Configuration-Files

lunedì 7 marzo 2011

Aprire link amministrazione in una nuova finestra

L'admin generator di Symfony è una manna dal cielo, ma stranamente non permette di impostare il target per i link in amministrazione. Nel mio caso ad esempio dovevo aprire un pdf collegato ad un documento.

Realizzarlo con JQuery è molto semplice.

Basta aggiungere un evento al load della pagina (es nel template) e impostare classname al nome della classe del tag che contiene il link (dovrebbe essere un LI).

<script>
$(document).ready(function() {
classname='sf_admin_action_show'; 
$('.'+classname+' a').click(function(){
  if ($(this).parent().hasClass(classname)) {
       window.open($(this).attr('href'),'_blank');
       return false; 
  } 
});
</script> 

mercoledì 9 febbraio 2011

Nascondere il pulsante Aggiungi nell'admin generator

Dopo qualche mese di lavoro serrato ho deciso di ricominciare a postare un po' di codice. Inizio con qualcosa di semplice ma utile specialmente per i neofiti.
Come nascondere il pulsante "Aggiungi" nell'area inferiore dell'interfaccia di amministrazione creata con il comando generate-admin.
Semplice e veloce,basta assegnare delle credenziali inesistenti all'azione new nel file generator.yml

config:
  actions:
    _new:     { label: "Aggiungi" }
    _edit:    { label: "Modifica" }
    _delete:  { label: "Elimina"  }
    _new:     { credentials: [fake] }
  fields:

giovedì 25 novembre 2010

Tabella con righe di colore alternato in Symfony

Creare dinamicamente una tabella con righe di colore alternato è estremamente semplice, solo che richiede il copia/incolla dello stesso codice ogni volta che si vuole usare. Sfruttando gli helper di symfony è possibile definirne uno perché si occupi da solo del problema.

class HtmlList
{
  public static function Alternate($one, $two)
  {
    self::$alternateRow = !self::$alternateRow;
    return self::$alternateRow ? $one : $two;
  }
  
  public static function PariDispari(){
   return self::Alternate('pari','dispari');
  }
 
  private static $alternateRow = true;
}

Per richiamarlo (dopo aver definito l'helper nella pagina) basta usare la sintassi

...
<table><tbody>
<?php foreach ($righe as $riga): ?>
<tr class="<?php echo HtmlList::PariDispari(); ?>">
<td>....</td> <td>....</td> </tr>
<?php endforeach; ?>
</tbody> </table>
....

e naturalmente definire le classi pari e dispari in un css, con sfondi di colore diverso.

Per impostare la classe in un caso particolare useremo invece

...
<table><tbody>
<?php foreach ($righe as $riga): ?>
<tr class="<?php echo HtmlList::Alternate('bianco','nero'); ?>">
<td>....</td> <td>....</td> </tr>
<?php endforeach; ?>
</tbody> </table>

giovedì 18 novembre 2010

Passare parametri, variabili, valori ad un form symfony

A volte è necessario passare dei parametri ad un form per aggiungere dinamicità non legata al modello. Ho fatto una certa fatica a trovarlo nella documentazione, spero quindi di semplificare il lavoro di altri.

Quando creiamo l'istanza del form usiamo

$parametro='pippo';
$form = new mioform(array(),array('parametro'=>$parametro));

Nella configurazione del form è possibile recuperarlo come opzione

public function configure()
{
$parametro=$this->getOption('parametro');
.
.
.
}