W ubiegłym tygodniu ukazała się wersja 1.3 alpha znakomitego frameworka Symfony. Z pewnością nie uświadczymy rewolucji podobnej do tej w momencie ukazania się sf 1.1 i 1.2, jednak liczne drobne zmiany jakie wprowadzono powinny dość znacząco usprawnić naszą prace - pełna lista zmian dostępna jest tutaj. Wersja 1.3 podobnie jak 1.1 ma być jedynie wersją przejściową do 1.4, która ma się ukazać dopiero w 2010 roku i która będzie wspierana do 2013.
Poniżej krótka lista najważniejszych wg mnie zmian:
- E-mail. Dodano domyÅ›lny system odpowiadajÄ…cy za wysyÅ‚anie e-maili oparty o SwiftMailer 4.1. Nie miaÅ‚em okazji testować tego mailera, także nie mogÄ™ podać żadnych konkretnych argumentów “za”, bÄ…dź “przeciw”. Wiem natomiast, że nowym Project Managerem tego projektu zostaÅ‚ Fabien Potencier, także o jego dalszy rozwój i wsparcie możemy być spokojni. Do tej pory w swoich projektach z powodzeniem wykorzystywaÅ‚em Zend_Mail, a SwiftMiailera postaram siÄ™ przetestować przy najbliższej okazji. Poniżej przykÅ‚ad wykorzystania zintergorwanego z Symfony SwiftMailera:
<?php
$message = $this->getMailer() ->compose('od@przyklad.pl', 'do@przyklad.pl', 'Temat wiadomości', 'Treść')->attach(Swift_Attachment::fromPath('/sciezka/do/pliku'));
$this->getMailer()->send($message);
?>
- Doctrine jako domyślny ORM. Pomimo tego, że pomału przekonuję się do tego ORMa, w większych projektach wciąż zostaje przy Propelu - budowanie zapytań z wykorzystaniem obiektów Criteria bardziej przypadło mi do gustu. Wg zapowiedzi wsparcie dla Propela ma się zakończyć wraz z pojawieniem się sf 2.0, jednakże ostatnio przewodzenie na projektem Propel objął François Zaninotto (były pracownik Sensio, autor wielu pluginów i części dokumentacji), co mam nadzieje zaowocuje reaktywacją projektu (wersja 1.4 ma ukazać się w październiku). Wracając do samego Doctrine - dodano nowe opcje dla definiowania struktury bazy danych w pliku YAML, a także nowe komendy dla generatorów (m.in: doctrine:build, doctrine:reload-data, doctrine:create-model-tables, doctrine:delete-model-tables, doctrine:clean-model-files).
- Formularze. Przede wszystkim dodano metodę useFields (mój odopwiedniki unsetAllExcept, przykład poniżej), klasy: BaseForm (klasa nadrzędna dla wszystkich formularzy) i sfFormSymfony (przydatna przy implementacji zdarzeń na formularzach). Ponadto dodano brakujące metody takie jak: setDefault(), setLabel(), setIdFormat(), setHidden() dla komponentów wykorzystywanych w formularzach.
<?php
class UserForm extends BaseUserForm
{
public function configure()
{
$this->useFields(array(
'name',
'surname',
'email'
));
}
}
?>
- innym ciekawym dodatkiem do nowej wersji sf jest możliwość tworzenia wÅ‚asnego skryptu instalatora. By tego dokonać należy podczas tworzenia nowego projektu użyć opcji –installer i zadać odpowiedni parametr skryptu (przykÅ‚ad poniżej).
Z poziomu wiersza poleceń:
php symfony generate:project --installer=custom_installer.php
PrzykÅ‚adowy skrypt instalatora (na podstawie “Symfony 1.3 + Doctrine 1.2″):
if (!$this->askConfirmation('Czy jestes pewien, ze chcesz rozpoczac instalacje?')) {
return ;
}
$this->installDir(dirname(__FILE__) . '/skeleton');
$this->runTask('plugin:publish-assets');
$validator = new sfValidatorEmail(array(), array('invalid' => 'Podano nie prawidlowy adres e-mail'));
$email = $this->askAndValidate('Prosze podac swoj adres e-mail:', $validator);
$this->runTask('configure:author', sprintf("'%s'", $email));
$secret = $this->ask('Prosze podac unikalny ciag znakow dla ochrony CSRF:');
$this->runTask('generate:app', 'frontend --escaping-strategy=true --csrf-secret=' . $secret);
$this->runTask('plugin:install', 'sfDoctrineGuardPlugin');
$this->reloadTasks();
$this->runTask('guard:create-user', 'kamil haslo');
$this->runTask('clear:cache');
Migracja do nowej wersji nie powinna przysporzyć problemów - instrukcja dostępna jest na stronie projektu.
Polecam również:
http://www.symfony.pl/2009/10/symfony-1-3-alfa-2/