Sympal a Symfony CMF

Jonathan Wage, il creatore dell’ORM Doctrine, ha rilasciato pochi giorni fa la prima versione di Sympal, un CMF scritto su symfony e sviluppato da Sensio Labs e Centre{Source}. Il CMF è molto interessante poichè, sfruttando tutta la potenzialità del framework, è facilmente estendibile attraverso un sistema di plugin nativo, è già stato sviluppato un plugin per creare un blog. Il sistema è molto giovane, ma promette bene, consiglio tutti di stare attenti alla sua evoluzione.

group by

Quante volte vi è capitato di dover fare una semplice group by per contare le righe di una tabella raggruppate per una data colonna? Per intenderci, quello che si fa in maniera semplicissima in SQL con

SELECT TYPE,COUNT(*) AS num FROM card GROUP BY TYPE;

Purtroppo con Propel la cosa non appare subito immediata. Ecco quindi un prezioso metodo da aggiungere alla vostra classe Peer per poterlo fare in modo semplice. Prima di tutto occorre inserire una nuova proprietà $count nel vostro modello (che nel mio esempio si chiama “Card”), con relativi getter e setter:

1
2
3
4
5
6
7
8
9
10
11
protected $count;
 
public function getCount()
{
  return $this->count;
}
 
public function setCount($count)
{
  $this->count = $count;
}

Ecco quindi il pezzo forte, in CardPeer (ricordate sempre che va adattato secondo il nome del vostro modello):

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
/**
 * grouped select
 * @param  Criteria $c
 * @param  string   $column
 * @return array
 */
public static function doSelectGroupBy(Criteria $c = null, $column)
{
  if (empty($c))
  {
    $c = new Criteria;
  }
  self::addSelectColumns($c);
  $c->addGroupByColumn($column);
  $c->addAsColumn('cnt', 'COUNT(*)');
  $stmt = self::doSelectStmt($c);
  $cards = array();
  while ($row = $stmt->fetch(PDO::FETCH_NUM))
  {
    $card = new Card;
    $col = $card->hydrate($row);
    $card->setCount(($row[$col] !== null) ? (int) $row[$col] : null);
    $cards[] = $card;
  }
  return $cards;
}

Ecco infine un esempio di utilizzo:

1
$cards = CardPeer::doSelectGroupBy(null, CardPeer::TYPE);

Symfony 2.0 al phpDay

Durante il phpDay di quest’anno, che si terrà a Verona tra il 15 e 16 Maggio, Fabien Potencier presenterà un intervento dedicato a Symfony 2.0.

questo l’abstract dell’intervento, che è stato da poco presentato anche al phpQuebec.

Symfony 2.0 is a major step forward for the symfony project. This new version introduces new concepts and new components, and make the framework even more decoupled and flexible than before. As an added bonus, the framework is also more lightweight and much faster. This session will give you a feeling of the power of Symfony 2.0 by introducing the main new components of the framework.

Mi raccomando partecipate numerosi! 😉