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.

giovedì 17 ottobre 2013

Vagrant

Qualcuno forse ne avrà sentito parlare, io qualche mese fa mi ero informato poi ho visto che la JetBrain che sviluppa PHPStorm, l'IDE che uso, lo include (come comandi) all'interno dell'IDE e allora approfondisco l'argomento.
Devo dire che è veramente comodo e pratico. In un ambiente di sviluppo con più sviluppatori è una manna.

Ci vuole un po, però quando inizi a gestirlo bene divente indispensabile.
Vagrant, altro non è che un codice scritto in Ruby che si interfaccia con le applicazioni di virtualizzazione, tipo VirtualBox. Il grande vantaggio è che definendo un file di configurazione e lanciando il semplice comando vagrant up nel giro di qualche minuto si ha a disposizione una macchina di sviluppo con qualsiasi SO a bordo e cnfigurata con il software che ci serve. Fin qui, uno potrebbe dire: "che c'è di nuovo ci sono tantissimi software di virtualizzazione". Il grande vantaggio è la comodità di tirare su la macchina senza dover installare il SO da zero, ma scaricandosi una vbox base e poi configurando la condivisione con la macchina guest (la nostra). Infatti la comodità è che faccio mappare la cartella in cui sviluppo alla root del sito web sulla macchina vagrant e digitando localhost:XXXX (dove XXXX è la porta mappata da vagrant sul guest) vedo il mio sito.

Io mi sono creato un file Vagrant per TYPO3 ed uno per Symfony, mi basta metterli sulla root della mia cartella di sviluppo digitare vagrant up e dopo poco posso accedere al mio sito.

Con alcuni accorgimenti che spiegherò su un altro post è possibile migliorare le prestazioni, nel mio OSX ormai non uso più MAMP che era pesante, questo è veloce e con poche istruzioni se ne va giù, tra l'altro ne posso avere uno diverso per ogni progetto.

giovedì 9 maggio 2013

Configurare xdebug su MAMP

Xdebug è il sistema di debugging e profiling di php. E' uno strumento indispensabile per chi deve sviluppare codice e permette facilmente di trovare gli errori e i colli di bottiglia del proprio applicativo.

Per chi usa MAMP, l'ambiente che comprende PHP MySQL Apache per OSX,  configurarlo è abbastanza semplice, am se non fatto correttamente può non funzionare.

Per prima cosa andare nel menù File->Edit Template->PHP e scegliere la versione che si sta usando. A questo punto si apre il file php.ini che contiene la configurazione del nostro php, andare alla fine e scommentare la riga:

zend_extension="/Applications/MAMP/bin/php/php5.3.20/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
Dove il numero 5.3.20 può essere diverso in base alla versione propria.

A questo punto aggiungere le seguenti righe:

xdebug.default_enable=1
xdebug.coverage_enable=1
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = "/tmp"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.max_nesting_level = 2000
Importante la riga 9 che serve per evitare che venga generato l'errore relativo al "Maximum nesting level reached". Fatto questo si salva il file e si riavvia MAMP e il gioco è fatto.

martedì 30 aprile 2013

Personalizziamo gli oggetti di contenuto con fluidpage e vhs

In alcuni post precedenti avevo spiegato come utilizzare fluidpage per sostituire il vecchio templavoilà in TYPO3 CMS 6.
Ora grazie agli helper del pacchetto vhs è possibile decidere di personalizzare l'output di una determinata sezione della pagina, mostrando i contenuti degli oggetti base di TYPO3 in maniera totalmente personalizzata grazie al typoscript.

Questa funzionalità in questo momento (oggi 30 aprile) non è ancora presente nel TER, ma c'è in github (https://github.com/FluidTYPO3/vhs.git).
Helper vhs page.content.render permette di recuperare il contenuto dalla tabella tt_content di una specifica colonna, in gergo "fuidpages" significa che scelgo una sezione di back-end e la rendo in quel punto.
Questa cosa si poteva fare anche nella vecchia modalità, oggi però è possibile personalizzare tutti gli oggetti inseriti in questa colonna (e solo in questa) modificando il typoscript con cui sono resi, basta attivare la proprietà render e settarla a FALSE, in questo modo dal helper ritorna un array di record del database che poi basta passare al helper di Fluid cObject.

A seguire un esempio che mi carica i contenuti nella sidebar della mia pagina recuperando i record dalla sezione con colPos=1. Viene quindi usato il typoscript lib.clearcontent che mi rende i campi con un mio specifico typoscript.

<v:page.content.render column="1" as="sidebars" render="FALSE">
 <f:for each="{sidebars}" as="sidebar">
  <div class="widget">
   <f:cObject typoscriptObjectPath="lib.clearcontent">{sidebar}</f:cObject>
  </div>
 </f:for>
</v:page.content.render>

mercoledì 10 aprile 2013

Installare la libreria intl su MAMP

Lavorando con Symfony2 mi è successo di avere la necessità di installare la libreria intl di PHP che riconosce il locale e mostra il carattere di separazione dei decimali automaticamente.

Creare un sito con fluidpages

Da quando TYPO3 4.5 ha introdotto la grid (template layout) come elemento per estendere le vecchie 4 colonne si è aperta una nuova possibilità di personalizzare il backend. Però, un pò per la presenza del più flessibile Templavoilà, un po per la complessità pochi le hanno usate.

Oggi rientrano in corsa, non come backend layout, ma come fluidpages. Questa estensione fa parte del mondo FEDEXT, e permette di personalizzare le pagine proprio come faceva templavoilà.

sabato 6 aprile 2013

Fluidpages: un nuovo modo di creare i template

Da TYPO3CMS 6 la community è orfana del tanto acclamato Templavoilà. Grazie a fluid peró abbiamo una nuova modalità di personalizzare il back-end ed inserire i template.

Fluidpages e flux creano un nuovo ambiente dove creare e personalizzare i template.

Fluidpages è un'estensione che aggiunge alle pagine la possibilità di personalizzare il layout sulla base di template creati con fluid. Sfrutta le funzionalità aggiunte dall'estensione flux, e cioè la grid flessibile con cui l'amministratore può configurare il plugin per definire come deve mostrarsi la pagina nel back-end e come devono piazzarsi i contenuti nella pagina finale.

A breve pubblicherò alcuni tutorial su come usare fluidpages per creare il nostro back-end di TYPO3 CMS in modo da adattarsi perfettamente a come i contenuti verranno mostrati nel sito.

GIT, un nuovo modo di fare VCS

Ho lavorato per molto tempo con svn e si è dimostrato un ottimo sistema di version control (VCS), ma con dei limiti che un po alla volta ne hanno limitato l'utilizzo.

SVN richiede la presenza di un server dove salvare i commit che vengono fatti e questo server deve essere sempre raggiungibile, altrimenti non si può versionare il lavoro. Se il lavoro da versionare viene fatto sempre in luoghi collegati a questo server il problema non sussiste, ma se questo non avviene come nel mio caso, nascono dei seri limiti. Io ad esempio lavoro molto anche in viaggio e questo limita il mio accesso alla rete.

venerdì 5 aprile 2013

Recuperare gli utenti da TYPO3 mediante extbase

A chi inizia ad usare extbase per la prima volta e vuole estrarre gli utenti dalla tabella fe_users, si trova di fronte il problema che non torna nulla, perchè?

giovedì 4 aprile 2013

Il miglior IDE per PHP

Succede sempre più spesso di sentirsi fare la domanda da 1 milione di dollari: Qual è il miglior IDE per PHP?

La risposta di solito scontata è quello che utilizza chi risponde. Ma spesso non è quella giusta, almeno per chi ha fatto la domanda.

Nella mia storia di programmatore ne ho provati molti, tra cui (ed in ordine): Eclipse, Aptana e PHPStorm.

Devo dire che sebbene Eclipse sia il più flessibile è anche il più mastodontico e pesante (a livello di performance), ah ... dimenticato io uso OSX, per cui uno dei requisiti del mio IDE perfetto è quello di girare su MAC.
Aptana è in pratica un fork di Eclipse, un po più carino.

PHPStorm è, a mio parere, il migliore nella sua versione 6 è veloce, ha moltissimi plugin che permettono di integrare molti linguaggi ed ambienti.

TYPO3 6.X: Cucù templavoilà non c'è più!

Per coloro che usavano il framework tanto potente, purtroppo una brutta notizia.

Ma nessun timore, morto un papa se ne fà un altro. Morto Templavoilà ne nasce uno ancora più potente: fluidpages.

Questa estensione, nata dalla maestosa creatività di Claus Due, permette di ricreare una struttura di templating simile a quella di Templavoilà, ma molto più potente perchè si fonda sul nuovo template engine Fluid.

Per chi ne vuole sapere di più trovate info su www.fedext.net.

Real url dopo aver aggiornato TYPO3 non funziona più!!! Va sempre nella home!

Cavolo! E' la situazione che mi è capitata aggiornando una 4.4 ad una 4.5. Ho perso una svalangata di tempo a debuggare con il developer log e poi riguardato per minuti interi la configurazione di Real url, ma niente! Arraivato alla frutta decido di debbugare il codice sorgente e....

MA CHE P...A! Senza volerlo avevo installato simulate static documents che viene eseguito dopo realurl e quindi mi resettava gli url.

Spero che qualcuno grazie a questo post possa perdere meno tempo :)

martedì 1 gennaio 2013

Imagemagick con TYPO3 e MAMP non viene trovato

Prova e riprova, ma proprio non se ne viene fuori:
Installo imagemagick, vado nell'install tool di TYPO3, ma non il programma non riesce a trovare i binari del programma imagemagick.

Cerca e ricerca sul web, ma non trovo nulla, alla fine ho trovato che poteva essere il seguente file:
/Applications/MAMP/Library/bin/envvars

Se si commentano le seguenti 2 righe:

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH


 e si riavvia MAMP il problema si risolve ed imagemagick funziona correttamente.