Zend Framework űrlap és a dekorátorok


Sok PHP fejlesztőnek nem tetszik az űrlap készítés Zend_Form segítségével.
Nekem is többször meggyűlt vele a bajom.

Később rájöttem, hogy nagyszerű dolog, a szerveroldali validációt helyben meg lehet oldani.

Gondot okoz, hogy a megjelenített HTML kód tele van szórva <dd>, <dt> tagokkal.

Ebben az írásban bemutatva a megjelenítési mód: http://devzone.zend.com/1240/decorators-with-zend_form/

Saját példa, egy Általános Szerződési Feltételek elfogadását vizsgáló checkbox:

        $accept_terms = $this->createElement('checkbox', 'accept_terms');
        $accept_terms->setDecorators(array('Errors','ViewHelper'));
        $accept_terms->setRequired('true');
        $accept_terms->setUncheckedValue(null);
        $accept_terms->addErrorMessage('Csak akkor küldhető el az űrlap, ha elfogadja az Általános Szolgáltatási Feltételeket!');
        $this->addElement($accept_terms);

A dekorátorokat átrendeztem, előbb van a hiba üzenet megjelenítés, azután a form elem, a <dt>,<dd> elemek nem jelennek meg.

Zend Framework 2 info

What’s New in Zend Framework 2

A modularizált architektúrájú Zend Framework 2

Az új Zend Framework 2.0 egy az alapoktól újragondolt – és részben újraírt -, erősen moduláris architektúrával érkezik.
Új ModuleManager és ServiceManager osztályok vannak.
Az új Zend Frameworkkel készült osztályok kevésbé függenek egymástól.

forrás:  http://prog.hu/hirek/3073/Elkeszult+a+modularizalt+architekturaju+Zend+Framework+2+0.html

ZF 2

Zend Framework: Rádió gombok egyedi megjelenítése a template-ben

Belefutottam egy olyan esetbe, hogy a rádiógombokat külön kellett megjeleníteni a sablonban a design miatt.

A formRadio helpert kellett elővenni, használni.

Az ötletet a Stackoverflow-n találtam:
http://stackoverflow.com/questions/8257466/zend-how-to-get-individual-radio-button-in-viewscript
http://stackoverflow.com/questions/3962081/edit-individual-radio-buttons-in-zend-form-view-script
http://framework.zend.com/apidoc/2.0/classes/Zend.Form.View.Helper.FormRadio.html

Minta:

A form a View-nak átadott űrlap: $this->view->form = $form;
A radio_choice az űrlap egyik eleme.

 

               formRadio(
                            $this->form->radio_choice->getFullyQualifiedName(),
                            $this->form->radio_choice->getValue(),
                            null,
                            array(1 => $this->form->radio_choice->getMultiOption(1))
                    );
                    ?>
                                        formRadio(
                            $this->form->radio_choice->getFullyQualifiedName(),
                            $this->form->radio_choice->getValue(),
                            null,
                            array(2 => $this->form->radio_choice->getMultiOption(2))
                    );
                    ?>

Cron Job with Zend Framework

php -q -f /path/cronscript.php

/**************** I. ver. without Models**************/

    $application = new Zend_Application(
                    APPLICATION_ENV,
                    APPLICATION_PATH . '/configs/application.ini'
    );

 $application->getBootstrap()->bootstrap(array('db'));
$db = $application->getBootstrap()->getResource('db');
$rows = $db->fetchAll("SELECT .....");
 //DELETE
        try {
            $condition = array(
                'id  IN(?)'=> $rows
            );
            $delete = $db->delete('users',$condition);
            Zend_Debug::dump($delete);
        } catch (Zend_Exception $e) {
            echo $e->getMessage();

        }

        /**************** II. ver.  using models **************/       

            $application = new Zend_Application(
                    APPLICATION_ENV,
                    APPLICATION_PATH . '/configs/application.ini'
    );

   $application->bootstrap();

 //in controller
$db = Zend_Db_Table::getDefaultAdapter();   
$rows = $db->fetchAll("SELECT .....");

//Model
  $model = new Model_DbTable_Users();
  if (!empty($rows)) {
      $result = $model->deleteUsersById($rows);
      Zend_Debug::dump($result);
  }

In II. version I use $application->bootstrap(); instead of  $application->bootstrap()   ->run();

run(): If so, it registers the bootstrap with the ‘bootstrap’ parameter of the front controller, and dispatches the front controller.

http://www.masnun.me/2011/08/21/using-zend-framework-models-and-libraries-from-command-line-or-cron-job.html

http://www.mediabandit.co.uk/blog/248_setting-up-cron-with-zend-framework-1-11

Zend Framework 1 egyszerűen

Egyszerűen, ha más oktatóanyag bonyolult volt:

Zend Framework programozás alapok – bevezető

Zend Framework programozás alapok – Alap konfiguráció

Zend Framework programozás alapok – Könyvtárak felépítése

Zend Framework programozás alapok – Controller és View létrehozása

Zend Framework programozás alapok – Action URL struktúra és Controller

Zend Framework programozás alapok – URL és Action

Zend Framework programozás alapok – GET paraméterek


Rob Allen Getting started with Zend Framework 2 (beta 5)

Most próbáltam ki (feltöltve) Rob Allen Zend Framework 2 oktató anyagában leírt CD katalógus programot. (PHP 5.3 kell hozzá.)

http://akrabat.com/zend-framework-2-tutorial/

(This tutorial works on Beta 5 for Zend Framework 2. It may work on later versions, but it will not work on earlier versions.)

Kiigazítások:

Album/ module_config.php:

'controller' => array(
 'classes' => array(
 'AlbumControllerAlbum' => 'AlbumControllerAlbumController',
 ),
 ),

helyett:

'controllers' => array(
 'invokables' => array(
 'AlbumControllerAlbum' => 'AlbumControllerAlbumController',
 ),
 ),

edit.phtml:

<h1><?php echo $this->escape($title); ?></h1>

helyett:

<h1><?php echo $this->escapeHtml($title); ?></h1>

global.php

'dsn' => 'mysql:dbname=zf2tutorial;hostname=localhost',

helyett:

'dsn' => 'mysql:dbname=zf2tutorial;host=localhost',

 

A Zend könyvtár meghívása elég trükkös:

Főkönyvtár:

init_autoloader.php:

$loader = include ‘vendor/autoload.php’;

autoload.php:

$map = require $composerDir . ‘/autoload_namespaces.php’;

autoload_namespaces.php:

return array(
‘Zend’ => $vendorDir . ‘/zendframework/zendframework/library/’,
);