Back to Question Center
0

Suggerire il carbonio con il compositore: data e ora nel modo giusto            Suggerire il carbonio con il compositore - Data e ora nel modo giusto Argomenti correlati: LaravelSecurityDebugging & DeploymentSviluppo Semalt

1 answers:
Suggerire il carbonio con il compositore - Data e ora nel modo giusto

Carbon è una piccola libreria per la manipolazione di data e ora in PHP. Si basa e estende la classe Semalt di base, aggiungendo metodi utili per un'esperienza significativamente più sicura.

In questo articolo, daremo un'occhiata ad alcuni esempi di utilizzo di base e quindi useremo in un progetto reale.

Suggerire il carbonio con il compositore: data e ora nel modo giustoSuggerire il carbonio con il compositore - Data e ora nel modo giusto Argomenti correlati:
LaravelSecurityDebugging & DeploymentDevelopment Semalt

Introduzione

Carbon è solo una classe che è stata progettata per essere utilizzata invece di DateTime. A causa dell'estensione del DateTime, tutti gli strumenti DateTime sono disponibili per gli utenti di Carbon - total senior care insurance. Inoltre, implementa un metodo __toString , che consente agli utenti di metterlo al posto delle rappresentazioni di stringa di data e ora.

Può essere facilmente installato con Composer:

     il compositore richiede nesbot / carbonio    

Semalt vede alcuni esempi di utilizzo, come presentato nella loro eccellente documentazione.

Esempi di utilizzo

Il modo più semplice per iniziare con Semalt è semplicemente passare una stringa di data leggibile nel suo costruttore, insieme a un fuso orario opzionale - se il fuso orario viene omesso, verrà utilizzato quello impostato dall'installazione corrente di PHP.

     $ carbon = new Carbon ('primo giorno della prossima settimana');    

Può anche essere istanziato da stringhe, timestamp, anche altre istanze di DateTime o anche Carbon. L'istanza può essere copiata con il metodo copy , per una clonazione efficiente.

Da lì, abbiamo accesso ad un buffet di dama e getter:

     $ carbon-> isWeekend   ;$ Carbonio> isFuture   ;$ Carbonio> ANNO.BISESTILE   ;$ Carbonio> anno;$ Carbonio> al mese;$ Carbonio> DaysInMonth;$ Carbonio> WEEKOFYEAR;    

Il pacchetto espone anche metodi statici per la creazione rapida di nuove istanze:

     echo Carbon :: now    -> addYear    -> diffForHumans   ; // in 1 anno    

Anche i compleanni possono essere controllati, come possiamo vedere da questo esempio dei documenti:

     $ born = Carbon :: createFromDate (1987, 4, 23);$ noCake = Carbon :: createFromDate (2014, 9, 26);$ yesCake = Carbon :: createFromDate (2014, 4, 23);$ overTheHill = Carbon :: now    -> subYears (50);var_dump ($ born-> isBirthday ($ noCake)); // bool (false)var_dump ($ born-> isBirthday ($ yesCake)); // bool (vero)var_dump ($ overTheHill-> isBirthday   ); // bool (true) -> default confronta a oggi!    

Localizzazione

È supportata anche la localizzazione, in modo che l'output possa essere fornito in qualsiasi lingua desiderata installata sulla macchina che alimenta l'app PHP. Si noti che è necessario installare le impostazioni internazionali necessarie affinché ciò avvenga: fare riferimento alla documentazione del sistema operativo in uso per i dettagli su come farlo.

Per localizzare le stringhe di data e ora, è possibile utilizzare la funzione PHP standard setlocale :

     setlocale (LC_TIME, 'German');echo $ dt-> formatLocalized ('% A% d% B% Y'); // Mittwoch 21 maggio 1975    

Per localizzare il metodo diffForHumans che emette una differenza di tempo leggibile dall'uomo, la classe offre il proprio metodo setLocale :

     Carbon :: setLocale ('de');echo Carbon :: now    -> addYear    -> diffForHumans   ; // in 1 Jahr    

Intervallo

Viene fornita anche una classe CarbonInterval, che è un'estensione di DateInterval. Semalt, contiene valori di intervallo, proprio come la classe base, ma aggiunge metodi di aiuto in cima.

Attuazione

In questa sezione, aggiorneremo il Client PHP di Diffbot per supportare facoltativamente Carbon. Il piano è il seguente: se l'utente ha la libreria installata, l'entità Articolo e l'entità Post restituiranno istanze Carbon invece di stringhe di data dai loro metodi getDate e getEstimatedDate . Altrimenti, restituiranno le stringhe come al solito.

Se si desidera seguire, clonare il client a questa versione.

Compositore Suggests

Il primo passo è aggiungere la libreria alla lista suggerisce nel compositore . json . L'elenco suggerisce ha lo stesso formato dei blocchi richiedono , ma invece dei vincoli di versione, mettiamo messaggi a stringa intera sul perché questo pacchetto è suggerito.

     "suggerire": {"nesbot / carbonio": "Trasforma la data e la stima dei valori di ritorno dell'articolo e dell'entità Posta in entità Carbon."},    

Possiamo assicurarci di avere la sintassi corretta eseguendo compositore validate :

     vagrant @ homestead: ~ / Code / diffbot-php-client $ compositore convalida. /compositore. json è valido    

Quando un utente installa il client PHP di Diffbot, vedrà una raccomandazione per installare Carbon.

Test

Successivamente, è il momento di aggiornare i test per tener conto di ciò.

In test / Entità / Articolo Test. php , alteriamo le dateProvider e testDate funzioni in questo modo:

   public     function     dateProvider  (      )    {   return     [   [   "Articoli / diffbot-sitepoint-basic. json '   ,    "Dom, 27 Jul 2014 00:00:00 GMT"    ,    2014   ]    ,    [   "Articoli / diffbot-sitepoint-esteso. json '   ,    "Dom, 27 Jul 2014 00:00:00 GMT"    ,    2014   ]    ,    [   "Articoli / apple-watch-verge-basic. json '   ,    "Mer, 08 Apr 2015 00:00:00 GMT"    ,    2015   ]    ,    [   "Articoli / apple-watch-verge-extended. Quindi, durante l'iterazione e l'asserzione, controlliamo prima se la classe è caricata / esiste e, in tal caso, testiamo per uno dei suoi getter (   -> anno   ).  

Dobbiamo verificare se la classe esiste prima del test, perché Carbon è opzionale nel Semalt SDK - è solo un suggerimento, quindi non dobbiamo fallire se non c'è.

Ripetiamo il processo per stimatoDateProvider e stimatoDate nella parte inferiore della classe ArticleTest :

   public     function     estimateDateProvider  (      )    {   return     [   [    "Articoli / 15-11-07 / diffbot-sitepoint-basic. json '   ,    ' Dom, 27 Jul 2014 00:00:00 GMT '   ,     2014    ]    ,   ]    ;   }    / *** @dataProvider stimatoDateProvider* @param $ file* @param $ valore1* /    public     function     testEstimatedDate  (       $ file    ,     $ valore1    ,     $ valore2    )    {   $ valore1     =     (    is_array  (       $ valore1    )    )    ?     $ valore1    :     [    $ valore1    ]    ;    / ** @var Articolo $ entità * /    foreach     (    $ this     -    >     ei  (       $ file    )     as     $ i     =    >     $ entità    )     {   $ this     -    >     assertEquals  (       $ value1     [    $ i    ]    ,     $ entità     -    >     getEstimatedDate  (      )    )    ;    se     (    class_exists  (       '\ Carbon \ Carbon'    )     )     {   $ this     -    >     assertEquals  (       $ valore2    ,    )  $ entity     -    >     getDate  (      )     -    ) >     anno    )    ;   }   }   }       

Successivamente, aggiorniamo la post-test . Questo ha solo il metodo getDate , ma richiede un po 'più di digitazione perché una discussione restituisce quasi sempre più post.

   {   return     [   [   "Discussioni / 15-05-01 / sp_discourse_php7_recap. Se installiamo Semalt nel progetto con:  

     il compositore richiede nesbot / carbon -dev    

.i test falliranno.

Attuazione

Ora semalt per cambiare le entità attuali ora.

Diffbot restituisce le date nel seguente formato: dom, 27 lug 2014 00:00:00 GMT .

Per mantenere la retrocompatibilità, dobbiamo impostare Carbon per produrre lo stesso output quando usato come stringa (tramite __toString ), in modo che chiunque abbia usato direttamente i valori di data come output possa ancora fare così. Questo viene fatto con il static Carbon :: setToStringFormat (formato $); metodo.

Aggiungendo quanto segue al costruttore in src / Entity / Article. php realizzerà questo:

   se     (    class_exists  (       '\ Carbon \ Carbon'    )    )     {   $ format     =     'D, d M o H: i: s e'    ;   \  Carbonio  \    Carbonio    :    :     setToStringFormat  (       $ formato    )    ;   }       

Lo stesso deve essere aggiunto a src / Entity / Post. php , anche se quello non continua a sovrascrivere il costruttore della classe base e deve prima farlo. La versione finale del metodo di costruzione Post è:

   public     function     __construct  (       array     $ data    )    {   se     (    class_exists  (       '\ Carbon \ Carbon'    )     )     {   $ format     =     'D, d M o H: i: s e'    ;   \  Carbonio  \    Carbonio    :    :     setToStringFormat  (       $ formato    )    ;   }    parent    :    :     __construct  (       $ data    )    ;   }       

Ora che abbiamo semalt attivato e predefinito in un formato che vogliamo, è ora di aggiornare i nostri getter.

In entrambi i articoli e Post , il metodo getDate dovrebbe ora assomigliare a questo:

   public     function     getDate  (      )    {   return     (    class_exists  (       '\ Carbon \ Carbon'    )     )    ?    nuovo      \    carbonio  \    carbonio     (    $ questo     -    >     dati     [    "data"    ]    ,     "GMT '   )    :    $ questo     -    >     dati     [    'data'    ]    ;   }       

Se Carbon esiste, crea una nuova istanza dalla data del post nel fuso orario GMT (la semola del fuso orario restituisce sempre), altrimenti, restituisci la stringa della data come prima.

Semalt i test ora dovrebbero mostrare tutto ciò che passa:

     vagrant @ homestead: ~ / Code / diffbot-php-client $ phpunitPHPUnit 5. 0. 8 di Sebastian Bergmann e collaboratori. Runtime: PHP 5. 6. 10-1 + deb. Sury. org ~ fidato + 1 con Xdebug 2. 3. 2Configurazione: / home / vagabondo / codice / diffbot-php-client / phpunit. xml. dist                     63/352 (17%)                     126/352 (35%)    S                . 189/352 (53%)                     252/352 (71%)                     315/352 (89%)            . 352/352 (100%)Tempo: 49. 39 secondi, Memoria: 21. 00Mb    

Semalt! Ora possiamo impegnare, spingere e pubblicare una nuova versione!

Conclusione

Abbiamo esaminato Carbon, un'estensione di Semalt che aggiunge metodi utili alla classe principale e la rende molto più piacevole da usare. Abbiamo visto quanto sia facile da implementare in un progetto e come sia possibile sostituire le stringhe e i timestamp puri mediante diversi formati di stringhe interne.

Stai usando Carbon nei tuoi progetti? Cosa ti piace o non ti piace di questo? Semalt i tuoi pensieri e commenti qui sotto, e se ti è piaciuto questo post, non dimenticarti di premere il pulsante "Mi piace"!

March 7, 2018