Anteprima del prossimo admin generator

Iniziano ad intravedersi in rete le prime indiscrezioni a riguardo dell’admin generator per la prossima versione di Symfony 2.

Dalle immagini possiamo notare la nuova skin, che sposta gli errori gli errori in un tooltip, e una rivista gestione dei pulsanti per la gestione di eventi batch.

Rilasciato Doctrine 2.0

Con un post sul blog di Doctrine, è stato annunciato il primo rilascio stabile del ramo 2, che sarà l’ORM predefinito di Symfony2. Come sottolineato nello stesso post, questa versione non è retro-compatibile col precedente ramo 1.

Fine supporto symfony 1.3

Come annunciato al momento del suo rilascio, il supporto alla versione 1.3 è terminato il mese scorso. Chi non l’avesse ancora fatto, dovrebbe aggiornare alla versione 1.4, seguendo l’apposita documentazione.

Niente calendario dell’avvento per il 2010

Purtroppo quest’anno salterà l’ormai tradizionale occasione del calendario dell’avvento. Lo stesso Fabien ha confermato che, essendo lo sviluppo di Symfony2 ancora pressante e mancando ancora molta documentazione, non avrebbe senso. Probabilmente l’ipotesi di basarlo sulla versione 1 non è stata nemmeno presa in considerazione.
Un vero peccato: ricordiamo come la comunità italiana di symfony sia praticamente nata con il calendario dell’avvento del 2008 e si sia fortemente impegnata anche per quello del 2009. Sarà per l’anno prossimo.

task con progress bar

A volte può capitare di dover eseguire dei task che durano diversi minuti, per esempio per delle importazioni o per delle conversioni di grandi quantità di dati. In questi casi può essere molto utile avere nel terminale una barra di progressione, che indichi le quantità dei dati già lavorati e ancora da lavorare.
Questa piccola classe è stata scritta per sfruttare l’ottimo pacchetto Console_ ProgressBar di PEAR (non reinventare la ruota!)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
 
/**
 * progressbar task
 *
 * PEAR's Console_ProgressBar is required.
 * If Console_ProgressBar is not installed, no bar is displayed and no error is given
 * @see http://pear.php.net/package/Console_ProgressBar
 *
 * Usage: extend this class instead of sfBaseTask in your task.
 *        in your execute() method, call $this->init() and then other methods
 *        where appropriate.
 *
 * @author  Massimiliano Arione
 */
abstract class progressbarTask extends sfBaseTask
{
  protected
    $bar,
    $hasBar = false;
 
  /**
   * initialize ProgressBar
   */
  protected function init()
  {
    $this->hasBar = @include_once 'Console/ProgressBar.php';
  }
 
  /**
   * start bar
   * @param integer $count total number of items
   */
  protected function start($count = 0)
  {
    if ($this->hasBar)
    {
      $this->bar = new Console_ProgressBar('[%bar%] %percent% %elapsed%', '=>', ' ', 90, $count);
    }
  }
 
  /**
   * update the bar
   * @param integer $step
   */
  protected function update($step)
  {
    if ($this->hasBar)
    {
      $this->bar->update($step);
    }
  }
 
  /**
   * erase the bar
   */
  protected function erase()
  {
    if ($this->hasBar)
    {
      $this->bar->erase();
      $this->log('');
    }
  }
}

L’utilizzo è molto semplice: basta richiamare il metodo init(), quindi ogni volta che serve barra di progressione richiamare start(), update() ed erase() rispettivamente prima, durante e dopo il ciclo. Al metodo update() va passato un contatore, che deve essere incrementato nel ciclo stesso.

Un anno senza ORM?

G9NGBH9YK85S
Se seguite questa discussione sul gruppo di Symfony su Linkedin avrete notato che è emersa una notizia abbastanza interessante.

The Doctrine 1.2 support seems to be extended to June, 1st 2011. But this post was written 11 months ago and I think the end of support was shortened…

Che affiancata al fatto che il supporto ufficiale a Symfony 1.x finirà il 31 dicembre 2012, fa evidenziare come per circa 1 anno e mezzo nessun ORM sarà ufficialmente supportato dal framework.

Che sia arrivato il tempo, per i progetti basati su symfony 1.x, di dare di nuovo un occhio a Propel?

Rilasciato symfony 1.4.8

Vista la regressione introdotta dal recente 1.4.7 (e nel corrispondente ramo 1.3, la 1.3.7) oggi è stato rilasciato un ulteriore aggiornamento.
Come bonus, i messaggi dell’admin generator offrono un maggior numero di traduzioni in italiano (anche in tedesco, se puiò interessare).
Ecco il changelog completo del ramo 1.4.

Rilasciato symfony 1.4.7

Oggi è stato dato l’annuncio del rilascio di una nuova versione di manutenzione dei rami 1.3 e 1.4, rispettivamente 1.3.7 e 1.4.7.
Attenzione: questo rilascio contiene un bug, che impedisce il corretto funzionamento della barra di web debug. Si consiglia quindi di attendere un ulteriore rilascio, che sistemi questo problema.

Symfony2 PR3

Annunciata ufficialmente la prima Preview Release 3 di Symfony2.
È stato fatto un gran lavoro di refactoring per rendere Symfony2 ancora più flessibile, coerente ed estendibile rispetto alla versione precedente.
Inoltre è stato incluso il nuovo profiler che permette non solo di visualizzare le preziose informazioni della web debug toolbar presente in symfony 1.x, ma anche di collezionare dati delle diverse request/response.
Le informazioni collezionate dal profiler posso essere semplici richieste, redirect, eccezioni, richieste Ajax etc., ed è inoltre possibile raccogliere informazioni specifiche creando dei Data Collector personalizzati e visualizzabili in seguito all’interno del webprofiler.
Symfony2 profiler
Se voleste cominciare a scaldare le dita, scaricate la sandbox contenente l’ultima release.

Un rilascio stabile di Symfony2 era previsto per la fine di quest’anno, ma con molta probabilità questo non avverrà in quanto mancano o risultano incomplete alcune componenti fondamentali come la gestione delle credenziali, l’internazionalizzazione, la validazione dei form e l’installazione dei bundle (nuovo concetto di plugin e non solo) da linea di comando.
Si ipotizza che ci sarà un primo vero rilascio in occasione della SymfonyLive 2011 che si terrà a Parigi il 3 e 4 marzo.
Nonostante manchino ancora queste componenti la comunità non è rimasta a guardare e, oltre a dare un importante contributo alla sviluppo del nuovo framework, ha già “sfornato” diversi progetti basati su Symfony2 e diversi bundle.
Da segnalare anche la nascita dello sviluppo di Symfony2 CMF, un Content Management Framework al cui sviluppo paterciperanno diverse aziende internazionali.
Symfony2 CMF sarà oggetto di un prossimo post.

Per ora godetevi Symfony2 PR3 e non esitate a contribuire allo sviluppo del framework stesso!

Basic authentication

Può capitare di avere un progetto in symfony che non prevede utenti, ma che ha comunque un’interfaccia di amministrazione. In questo caso, vale la pena installare sfGuardPlugin solo per far accedere un singolo utente? Ovviamente no.
Vediamo allora come risolvere il problema in modo semplice ed elegante.
Supponiamo di trovarci in una configurazione standard, con l’opzione security attivata per l’applicazione backend, e di avere a disposizione un modulo chiamato “default”. Se si preferisce un modulo diverso, occorre configurare opportunamente il file settings.yml per farvi puntare il login. Il primo passo consiste nell’aggiungere una rotta in routing.yml:

1
2
3
login:
  url:   /login
  param: { module: default, action: login }

Inseriamo poi le credenziali dell’utente che deve accedere al backend, nel file app.yml dell’applicazione:

1
2
3
4
all:
  admin_user:     admin
  # qui conviene mettere una password migliore :-)
  admin_password: admin

Basterà quindi inserire la sequente azione nel modulo default:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public function executeLogin(sfWebRequest $request)
{
  if ($this->getUser()->isAuthenticated())
  {
    return $this->redirect('@homepage');
  }
  if (isset($_SERVER['PHP_AUTH_USER']))
  {
    if ($_SERVER['PHP_AUTH_USER'] == sfConfig::get('app_admin_user') &&
        $_SERVER['PHP_AUTH_PW'] == sfConfig::get('app_admin_password'))
    {
      $this->getUser()->setAuthenticated(true);
 
      return $this->redirect($request->getUri());
    }
  }
  $this->getResponse()->setStatusCode(401);
  $this->getResponse()->setHttpHeader('WWW_Authenticate', 'Basic realm="Authentication required"');
 
  return sfView::NONE;
}

E il gioco è fatto. Eventualmente si può personalizzare il messaggio “Authentication required”.
Nei test funzionali, sarà possibile effettuare il login usando il metodo setAuth(), con l’accortezza di seguire il redirect dopo il primo get.

1
2
3
4
5
$browser->
  setAuth('admin', 'admin')->
  get('/')->
  with('response')->isRedirected()->followRedirect()->
 // eccetera...