Web Design

Symfony 1.4.20 Sessions Storage

Variabili di Sessione

Symfony facilita il salvataggio nelle varibili di sessione php tramite l’utilizzo della classe – sfUser –
in particolare:


// Per sfActions

$this->getUser()->setAttribute('nomevariabile', valore)
$this->getUser()->getAttribute('nomevariabile',se la variabile non esiste)

$this->getUser()->getAttributeHolder()->remove('nomevariabile');
$this->getUser()->getAttributeHolder()->clear();

// dal Template
$sf_user->getAttribute('nomevariabile')

Un esempio pratico:

actions.class.php


<?php
 
class contenutoActions extends sfActions // estende la classe Symfony
{ 
  public function executeFirstpage($request)// http://localhost/jobeet/web/frontend_dev.php/contenuto/firstpage
  {
    $nickname = 'Andrea';
 
    // 1. Salva nella sessione la variabile nickname con il valore Andrea
    // getUser()->setAttribute è un metodo della classe Symfony sfUser
    $this->getUser()->setAttribute('nickname', $nickname);
    return $this->renderText('Salvata la variabile di sessione nickname= '. $nickname);
  }
 
  public function executeSecondpage() // http://localhost/jobeet/web/frontend_dev.php/contenuto/secondpage
  {
    // 2. Carica la variabile di sessione nickname
    // getUser()->getAttribute è un metodo della classe Symfony sfUser
    //                                          variabile, se la variabile non esiste
    $nickname = $this->getUser()->getAttribute('nickname', 'Visitatore Anonimo');
    return $this->renderText($nickname); // render della variabile o di 'Visitatore Anonimo'
  }
  
  public function executeThirdpage() // http://localhost/jobeet/web/frontend_dev.php/contenuto/thirdpage
  {
    // richiama il template che carica direttamente dal suo interno la variabile di sessione
  }
  
  public function executeRemovenickname() // http://localhost/jobeet/web/frontend_dev.php/contenuto/removenickname
  {
    // getUser()->getAttributeHolder() è il contenitore di tutti i parametri
    // rimuove solo la variabile nickname
    $this->getUser()->getAttributeHolder()->remove('nickname');
    return $this->renderText('Rimosso nickname');
  }
 
  public function executeCleanup() // http://localhost/jobeet/web/frontend_dev.php/contenuto/cleanup
    // rimuove tutte le variabili di sessione
    $this->getUser()->getAttributeHolder()->clear();
    return $this->renderText('Rimosse tutte le variabili di sessione');
  }
}// END class

thirdpageSuccess.php


Hello, <?php echo $sf_user->getAttribute('nickname') ?>

Variabili di Sessione Flash

Symfony memorizza in sessione anche dei dati che definisce flash.
Le variabili flash vengono automaticamente cancellate dopo essere state caricate, non è necessario eliminarle esplicitamente dalla sessione.

actions.class.php


<?php
 
class contenutoActions extends sfActions // estende la classe Symfony
{ 
  public function executeThirdpage() // http://localhost/jobeet/web/frontend_dev.php/contenuto/thirdpage
  {
      $value = 'Questa è una nota Flash';
      $this->getUser()->setFlash('notice', $value);
  }
  
}// END class

thirdpageSuccess.php


<?php echo $sf_user->getFlash('notice') ?>

Ref: http://symfony.com/legacy/doc/gentle-introduction/1_4/it/06-Inside-the-Controller-Layer

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony 1.4.20 Sessions Storage

Symfony 1.4.22 – Controller – Actions – preExecute – execute – postExecute – CustomMethod

Symfony mette a dispossizione dei metodi speciali all’interno della classe sfActions per dare un ordine di esecuzione particolare alle nostre operazioni.

apps/frontend/modules/contenuto/actions/actions.class.php


<?php
 
class contenutoActions extends sfActions // estende la classe Symfony
{
  public function preExecute()
  {
    // 1. Il codice inserito qui viene eseguito all'inizio di ogni azione
    echo "Codice di preExecute<br>";
  }
    
  public function executePageone($request) // http://localhost/jobeet/web/frontend_dev.php/contenuto/pageone
  {
      $this->myCustomMethod();  // I metodi della classe azione sono accessibili
      
      return $this->renderText("Codice di executePageone<br>"); // 4. ultimo ad essere eseguito
  }
  
  public function postExecute()
  {
    // 3. Il codice inserito qui viene eseguito alla fine di ogni azione
    echo "Codice di postExecute<br>";
  }
 
  protected function myCustomMethod()
  {
    // 2. È possibile aggiungere i propri metodi, ammesso che non inizino con "execute"
    // In questo caso è consigliabile dichiararli protetti o privati
    echo "Codice di myCustomMethod<br>";
  }
}// END class

Renderizza:

Codice di preExecute
Codice di myCustomMethod
Codice di postExecute
Codice di executePageone

Reference:
http://symfony.com/legacy/doc/gentle-introduction/1_4/it/06-Inside-the-Controller-Layer

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony 1.4.22 – Controller – Actions – preExecute – execute – postExecute – CustomMethod

Symfony 1.4.22 – Controller – Actions – Basics Concepts – sfView

In Symfony 1.4.22 le azioni caricano i modelli e definiscono le viste gestendo tutta la logica dell’applicazione web.

Identazione e Convenzioni

Per convenzione per l’identazione del codice non utilizziamo tabulazioni ma un doppio spazio.

Il codice php deve essere

File Singoli o più Files

Le azioni possono essere racchiuse in un file singolo:

frontend/modules/miomodulo/actions/actions.class.php


class miomoduloActions extends sfActions
{
  public function executeIndex($request)
  {
    // ...
  }
 
  public function executeList($request)
  {
    // ...
  }
}

o divise in più file:

frontend/modules/miomodulo/actions/indexAction.class.php


class indexAction extends sfAction
{
  public function execute($request)
  {
    // ...
  }
}

frontend/modules/miomodulo/actions/listAction.class.php


class listAction extends sfAction
{
  public function execute($request)
  {
    // ...
  }
}

Notare come il nome dei file e delle classi sono correlati.

sfView

Un metodo nomeAction deve sempre finire con un return verso la vista.

Creiamo:
apps/modules/contenuto/templates/pageoneSuccess.php -> operazioni avvenute con successo
apps/modules/contenuto/templates/pageoneError.php -> operazioni errate
apps/modules/contenuto/templates/pageoneMyresult.php -> operazioni con un mio risultato personalizzato

apps/modules/contenuto/templates/pagetwoSuccess.php -> operazioni avvenute con successo con template diverso

apps/modules/contenuto/actions/actions.class.php


<?php
 
class contenutoActions extends sfActions // estende la classe Symfony
{
  public function executePageone($request) // http://localhost/jobeet/web/frontend_dev.php/contenuto/pageone
    {
    
       // return sfView::SUCCESS;
       // return sfView::ERROR;
       // return 'Myresult';

       // $this->setTemplate('pagetwo'); // nome template senza il suffisso Success
      
       // $this->getResponse()->setContent("<html><body>Hello, World!</body></html>");
       // return sfView::NONE;
       
       // return $this->renderText("<html><body>Hello, World!</body></html>");
    }
}// END class

Vediamo caso per caso:

se metto il return -> punta per default pageoneSuccess.php
return sfView::SUCCESS; -> pageoneSuccess.php
return sfView::ERROR; -> pageoneError.php
return ‘Myresult’; -> pageoneMyresult.php
$this->setTemplate(‘pagetwo’); -> pagetwoSuccess.php

Termina col render Hello world, no vista.
$this->getResponse()->setContent(“Hello, World!“);
return sfView::NONE;

Termina con il render ‘Hello world’, no vista
return $this->renderText(“Hello, World!“);

Reference:
http://symfony.com/legacy/doc/gentle-introduction/1_4/it/06-Inside-the-Controller-Layer

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony 1.4.22 – Controller – Actions – Basics Concepts – sfView

Symfony – Classi – Caricamento Automatico

In un progetto Symfony 1.4.22 è sconsigliato l’utilizzo dell’istruzione PHP – include_once –

Un esempio in plain PHP:


include_once 'classes/MyClass.php'; // carica la classe php
$myObject = new MyClass();

Symfony caricherà in automatico le classi contenute nei file PHP all’interno di:
apps/frontend/lib/miaClasse.class.php (il file deve terminare con .class.php)

Segue un esempio:

apps/frontend/lib/miaClasse.class.php


<?php

class miaClasse {
        // variabili membro o meglio proprietà
        public $a = 10;
        public $b = 20;
          
        // funzioni o meglio metodi
        public function sayHello() {
                echo "Hello! ";
        }
}

apps/frontend/modules/contenuto/actions/actions.class.php


<?php

class contenutoActions extends sfActions // estende la classe Symfony
{
  public function executePageone($request) // crea la pagina http://localhost/jobeet/web/contenuto/pageone
    {
        // DEVO dichiarare l'istanza, istanza cioè una copia di MyClass
        $miaClasse_1 = new miaClasse();
        // richiama MyClass ed avvia la funzione sayHello() - stampa "Hello!"
        $miaClasse_1->sayHello();
        
        $miaClasse_2 = new miaClasse();
        $miaClasse_2->a = 20; // invia un valore ad a
  echo  $miaClasse_2->a; // stampa 20  
    }
}// END class

apps/frontend/modules/templates/pageoneSuccess.php


<p>Template di Page One</p>

Puntare il browser a: http://localhost/jobeet/web/frontend_dev.php/contenuto/pageone

Stampa:

Hello! 20
Template di Page One

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony – Classi – Caricamento Automatico

Symfony 1.4.20 – Database – Caricare i Dati Iniziali

Come caricare automaticamente i dati iniziali nel database utilizzando Symfony 1.4.22

0. Continuiamo dalla lezione precedente a: http://www.lucedigitale.com/blog/creare-un-database-orm-doctrine/

1. Creiamo un file YAML con dei dati dummies, creiamo wamp64/www/jobeet/data/fixtures/categories.yml


# data/fixtures/categories.yml
JobeetCategory:
  design:
    name: Design
  programming:
    name: Programming
  manager:
    name: Manager
  administrator:
    name: Administrator
 
# data/fixtures/jobs.yml
JobeetJob:
  job_sensio_labs:
    JobeetCategory: programming
    type:         full-time
    company:      Sensio Labs
    logo:         /uploads/jobs/sensio_labs.png
    url:          http://www.sensiolabs.com/
    position:     Web Developer
    location:     Paris, France
    description:  |
      You've already developed websites with symfony and you want to work
      with Open-Source technologies. You have a minimum of 3 years
      experience in web development with PHP or Java and you wish to
      participate to development of Web 2.0 sites using the best
      frameworks available.
    how_to_apply: |
      Send your resume to fabien.potencier [at] sensio.com
    is_public:    true
    is_activated: true
    token:        job_sensio_labs
    email:        job@example.com
    expires_at:   '2008-10-10'
 
  job_extreme_sensio:
    JobeetCategory:  design
    type:         part-time
    company:      Extreme Sensio
    logo:         /uploads/jobs/extreme_sensio.png
    url:          http://www.extreme-sensio.com/
    position:     Web Designer
    location:     Paris, France
    description:  |
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
      eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
      enim ad minim veniam, quis nostrud exercitation ullamco laboris
      nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
      in reprehenderit in.
 
      Voluptate velit esse cillum dolore eu fugiat nulla pariatur.
      Excepteur sint occaecat cupidatat non proident, sunt in culpa
      qui officia deserunt mollit anim id est laborum.
    how_to_apply: |
      Send your resume to fabien.potencier [at] sensio.com
    is_public:    true
    is_activated: true
    token:        job_extreme_sensio
    email:        job@example.com
    expires_at:   '2008-10-10'

2. Carichiamo i dati nel DB
cmd.exe -> C:\wamp64\www\jobeet>symfony doctrine:data-load

Aprire phpMyAdmin, ora i dati sono presenti nel database

3. Generiamo form, filtri, modelli, e cancelliamo e ricreiamo il database con tutte le tabelle.
cmd.exe -> C:\wamp64\www\jobeet>symfony doctrine:build –all –and-load

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony 1.4.20 – Database – Caricare i Dati Iniziali