Archív

Archív pre kategóriu ‘PHP’

PHP frameworky na konferencii Zend/PHP

November 11th, 2009 admin Žiadne komentáre

Zástupcovia Agavi, CakePHP, CodeIgniter, Symfony a Zend diskutovali o svojich technológiách na konferencii Zend/PHP.

Agavi predstavil David Zulke, vedúci vývojár a generálny riaditeľ poradenskej firmy Bitextender, ktorá začínala s frameworkom Mojave: “Ponúka také funkcie ako validácia a manipulácia s fontami, nemá však riešenie pre generovanie dátového modelu pre aplikácie. Vývojári môžu vziať existujúce webové aplikácie a umiestniť na ňu vrstvu REST alebo SOAP“. Zulka ďalej zdôraznil význam štruktúry pre vývoj, povedal: “Myslím, že je povinnosťou frameworku, aby ponúkol štruktúru pre projekty.

CakePHP môžu využívať ľudia s menšími vývojárskymi skúsenosťami, tvrdí Nate Ábela, vedúci autor projektu.

Ak by som mal povedať nejakú zvláštnosť o CakePHP, tak je to napríklad to, že sme uspeli práve preto, že je veľmi kontextovo-priateľský“, povedal Ábela. “Vždy sme hrdý na to, že môžeme prezentovať pojmy z vyšších programovacích jazykov veľmi prístupným spôsobom.

Zástupca CodeIgniter:

Podľa mňa CodeIgniter je niečo, s čím sa veľmi jednoducho pracuje“, povedal Ed Finkler, webový vývojár a bezpečnostný výskumný pracovník na Purdue University. CodeIgniter poskytuje pekný základ, ktorý je možné ľahko nasadiť, a vďaka dynamickému načítavaniu je veľmi rýchly. CodeIgniter, však nemusí byť tou najlepšou voľbou pre vývoj rozsiahlych a zložitých aplikácií. Je vhodnejší pre malé a stredne veľké projekty.

Framework Symfony, ktorý vyvinula francúzska spoločnosť sa pýši svojimi bezpečnostnými funkciami, tvrdí Fabien Potencier, vedúci vývojár Symfony a generálny riaditeľ spoločnosti Sensio, ktorá sa zaoberá vývojom webových riešení a open source technológiami.

Ak máte radi francúzske jedlo, ak máte radi francúzske víno, myslím, že určite budete mat radi Symfony,” povedal Potencier. “Kladieme silný dôraz na bezpečnosť. Snažíme sa o čo najväčšiu bezpečnosť už v predvolenom nastavení“, povedal s tým, že ochrana je ponúkaná proti problémom cross-site scripting.

Symfony sa používa k tvorbe najväčších webových portálov na svete, ako je napríklad Yahoo“, uviedol Potencier.

Zend Framework sa líši od ostatných, pretože vývojári nemusia používať MVC, tvrdí Matthew Weier O’Phinney, vedúci projektu pre Zend Framework. “Kladieme dôraz na Unit testing, a dokumentáciu kódu“.

O’Phinney ďalej povedal: “Zend Framework vstupuje do hry pri použití iných frameworkov. Myslíme si, že po Zende siahnu programátori hlavne vtedy, ak majú v pláne používať aj iné knižnice“.

Zástupcovia tiež prezradili ako a či podporia PHP 5.3, ktoré pridáva funkcie ako menové priestory na zlepšenie organizácie kódu a pod..

Spoločnosť Zend Technologies, ktorá vyvíja Zend Framework, zahrnie podporu pre PHP 5.3 už v plánovanej verzii Zend Framework 2.0. Podľa Zend CEO Andi Gutmans by už mohla vyjsť na konci budúceho roka.

Kompletný prepis CakePHP do PHP 5.3 sa začal pred rokom. “Použijeme všetky tieto spoločné menové konvencie a sme vlastne prví, kto ich ich implementuje“, povedal Ábela.

Symfony 2.0 nebude podporovať PHP 5.3. “Symfony používa veľa veľkých spoločností, a mnoho z nich si nemôže dovoliť vykonať upgrade na najnovšiu verziu PHP“, tvrdí naopak Potencier.

Bude trvať ešte veľa času kým prejdeme na PHP 5.3,” povedal Potencier.

Zulka ale nesúhlasil s prístupom Symfony. “PHP 5.3 je v prvom rade veľký míľnik. Dáva skutočný prínos, a myslím, že miera prijatia bude oveľa vyššia, ako u 5.2 a 5.1.

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
Categories: PHP Tags:

Doctrine (ORM pre PHP)

Október 25th, 2009 admin Žiadne komentáre

Doctrine (Doktrína) je objektovo relačný mapper (ORM) pre PHP 5.2.3+, ktorá je umiestnená na databázovej vrstve (DBAL). Jedným z jej hlavných funkcií je možnosť písať databázové dotazy pomocou vlastného objektovo orientovaného SQL dialektu tzv. Doctrine Query Language (DQL), inšpirovaný známym Hibernate HQL. To poskytuje vývojárom výkonnú alternatívu k SQL, ktorá udržiava pružnosť, bez nutnosti zbytočných duplicít kódu.

Čo je vlastne ORM?

Objektovo relačné mapovanie (ORM) je technika používaná v programovacích jazykoch, ktorá rieši rôzne nekompatibilné typy dát v relačných databázach. To v podstate umožňuje, aby sme mali “virtuálnu objektovú databázu”, ktorá môže byť použitá z daného programovacieho jazyka. Existuje veľa voľných i komerčných balíkov, ktoré to ponúkajú a niektorí vývojári sa rozhodli si vytvoriť vlastné ORM.

Inštalácia doktríny

Inštalácia doktríny cez SVN je veľmi jednoduchá. V podstate nejde o inštaláciu ale o jednoduché stiahnutie. Stačí si teda stiahnuť akúkoľvek verziu doktríny z SVN servera: http://svn.doctrine-project.org

Ak chcete vyskúšať konkrétnu verziu, môžete použiť nasledujúci príkaz z terminálu:

svn co http://svn.doctrine-project.org/branches/1.2 .

Implementácia / inicializácia

Najskôr je samozrejme nutné si v php doktrínu includnúť – nastaviť cesty pomocou funkcie set_include_path(). Includuje sa nadradený adresár adresáru Doctrine (mám na mysli adresár 1.2/lib/Doctrine/). Napríklad:

/* V adresari $appFolder/library/ sa nachadza adresar Doctrine a subor Doctrine.php */
set_include_path(get_include_path()
  .PATH_SEPARATOR ."$appFolder/library/");

No a potom je potrebne doktrínu inicializovať. Predovšetkým je potrebné knižnici povedať kam sa budeme napájať. Napríklad:

$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
$manager->setAttribute(Doctrine::ATTR_AUTO_FREE_QUERY_OBJECTS, true);
 
/* tvorba pripojenia do db */
$connection = $manager->connection(
  $config->databaze->stroj .'://'
  .$config->databaze->username .':'
  .$config->databaze->password  .'@'
  .$config->databaze->host .'/'
  .$config->databaze->dbname,
  'doctrine'
);
$connection->setCharset('utf8');
$connection->setAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER, true);
$connection->setAttribute(Doctrine::ATTR_VALIDATE, Doctrine::VALIDATE_ALL);
$connection->setAttribute('portability', Doctrine::PORTABILITY_ALL);
$connection->getDbh()->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

Vytvorenie modelov

Aby ste mohli s databázou v doktríne pracovať ostáva nám urobiť ďalší dôležitý krok. Ako to už bolo spomenuté v odseku ORM, doktrína je vlastne vrstva ktorá robí program nezávislý od konkrétneho databázového stroja. Je jedno teda, či je to Postgresql, MySQL či Oracle. Je teda potrebné vytvoriť akúsi reprezentáciu databázy. No a v doktríne s databázou manipulujem prostredníctvom modelov – tried, odvodené od Doctrine_Record. Aby sme tieto modely nemuseli vytvárať ručne, Doctrine nám ponúka metódu, ktorá nám ich vygeneruje automaticky z databázy. Samozrejme odporúčam si tieto modely následne upraviť a skrášliť a napríklad namiesto uzivatelSkupinaId používať skupina_uzivatela_id a pod. A teraz samotný kód pre vygenerovanie modelov:

Doctrine::generateModelsFromDb('models', array('doctrine'), array('generateTableClasses' => true));

Metóda GenerateModelsFromDb vyžaduje len jeden parameter, a to je importný adresár (adresár, kde budú uložené vygenerované súbory). Druhým argumentom je pole mien databázových spojení pre ktoré sa vytvoria modely, a tretím argumentom sú jednotlivé predvoľby pre tvorbu modelov.
A teraz ukážka modelu užívateľa:

abstract class BaseUzivatel extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->setTableName('tbl_Uzivatel');
        $this->hasColumn('uzivatelId as id', 'integer', 6, array('type' => 'integer', 'primary' => true, 'autoincrement' => true, 'length' => '6'));
        $this->hasColumn('uzivatelMeno as uzivatelske_meno', 'string', 32, array('type' => 'string', 'default' => '', 'notnull' => true, 'notblank' => true, 'length' => '32'));
        $this->hasColumn('uzivatelHeslo as heslo', 'string', 255, array('type' => 'string', 'default' => '', 'notnull' => true, 'notblank' => true, 'length' => '255'));
        $this->hasColumn('uzivatelSkupinaId as skupina_uzivatela_id', 'integer', 5, array('type' => 'integer', 'default' => '', 'notnull' => true, 'length' => '5'));
        $this->hasColumn('uzivatelZmazany as zmazany', 'tinyint', 1, array('type' => 'tinyint', 'default' => '0', 'notnull' => true, 'length' => '1'));
        $this->hasColumn('rolaId as rola_id', 'integer', 2, array('type' => 'integer', 'default' => '1', 'notnull' => true, 'length' => '2'));
    }
}
class Uzivatel extends BaseUzivatel
{
}

Použitie

No a teraz poďme k nejakému príkladu. Budeme pritom pužívať vyššie uvedený model Uzivatel

Hľadám užívateľa (SELECT)

Jendoducho chceme nájsť užívateľa podľa jeho mena. A tu je kód:

$uzivatelia = Doctrine_Query::create()
     ->from('Uzivatel')
     ->where('uzivatelske_jmeno = ?', $uzivatelske_jmeno)
     ->execute();
foreach ($uzivatelia as $uzivatel) {
     if ($uzivatel instanceof Uzivatel) {
          echo 'Nasli sme uzivatela s menom '.$uzivatel->uzivatelske_meno;
     }
}

Jednoduché a prehľadné však? Lenže ono to ide ešte jednoduchšie (!):

/* Tento kod vrati prveho najdeneho uzivatela s danym menom */
$uzivatel = Doctrine::getTable('Uzivatel')
     ->findByuzivatelske_jmeno($uzivatelske_jmeno);
     ->getFirst();

Vytvorenie nového užívateľa (INSERT)

$uzivatel = new Uzivatel();
$uzivatel->uzivatelske_meno    = $uzivatelske_meno;
$uzivatel->heslo                = $heslo;
$uzivatel->skupina_uzivatela_id = 8;
$uzivatel->rola_id              = 1;
$uzivatel->save();
VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
Categories: PHP Tags: