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...