venerdì 8 novembre 2013

Attivare il debug a riga di commando su PHPStorm da remoto

Ecco un'altra cosa che mancava alla mia vagrant box, la possibilità di effettuare il debug tramite PHPStorm, lanciando il comando dalla shell della vagrant box io vorrei avere il debug sul mio IDE.

Ecco le operazioni necessarie:

  1. Creare in PHPStorm un server (Preferenze->PHP->Servers) con nome ed host uguali usando il file hosts (nel mio esempio ho chiamato il server vagrant.
  2. Verificare che il proprio php.ini abbia queste righe:
    xdebug.profiler_enable=1
    xdebug.remote_enable = 1
    xdebug.remote_port = 9000
    xdebug.remote_handler=dbgp
    xdebug.remote_host=10.0.2.2
    
    Dove 10.0.2.2 è l'indirizzo della mia macchina vista da vagrant, ognuno metterà quello specifico.
  3. Bisogna definire delle variabili per dire a xdebug con chi comunicare: si può fare in due modi, direttamente nella riga di comando oppure usando il comando export:
    con export faccio:
    export XDEBUG_CONFIG="idekey=phpstorm"
    export PHP_IDE_CONFIG="serverName=vagrant"
    
    direttamente a riga di comando scrivo:
    XDEBUG_CONFIG="idekey=phpstorm" PHP_IDE_CONFIG="serverName=vagrant" e poi il file php
A questo punto attivando la cornetta in PHPStorm (il listener delle connessioni) e lanciando il comando su vagrant il debug ha inizio.

venerdì 1 novembre 2013

Implementare il tipo Datetime in Extbase

TYPO3, normalmente usa il tipo timestamp salvando in formato int su database per indicare una data. Il grande vantaggio di questo tipo di approccio è che si lavora solo con dei numeri interi.

Con le nuove versioni di PHP sta però diventando sempre più comodo usare il tipo Datetime sia in PHP che nel database. Oggi con Extbase 6 (TYPO3 6.X) è possibile utilizarlo in maniera completa anche nelle entità consentendo quindi una grande flessibilità alle estensioni.

 Ecco come configurare il nostro sistema: Il modello diventa:
class MyEntity extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
    
    /**
     * @var \DateTime
     */
    protected $date;

    //put your code...
}
poi bisogna specificare a Extbase che l'elemento sarà salvato in una colonna di tipo datetime e questo lo si fa nella TCA:
   //General Table and ctrl section definition ...

   'columns' => array(
        'date' => array(
            'exclude' => 1,
            'config' => array(
                'dbType' => 'datetime',
                'type' => 'input',
                'eval' => 'datetime'
            ),
        ),
        // other column ...
I parametri importanti sono due:  
dbType, che definisce come sarà salvato nel database e i possibili valori sono: date o datetime, in base al tipo di colonna date o datetime, nel primo caso sarà salvato nel formato 'Y-m-d' nel secondo 'Y-m-d H:i:s'.  
Eval, che deve contenere il tipo date o datetime. Fatto questo nel database sarà salvato il datetime e il property mapper farà poi le relative mappature.