bonjour,
J'aurais besoin de vos conseils.
dans mon application j'utilise bcp les dates en les comparant; $date1 : est un parametre de l'URL sous le format (2015-12-21) et $date2 est un objet time provenant de la BDD.
Pour comparer ces 2 dates, j'ai toujours besoin de faire les mêmes opérations en les formatant;
par exemple :

  $date_parse = Time::parse($entity->date); 
  $date_finale = $date_parse->i18nFormat('yy-MM-dd');

j'ai fait un helper date mais qui ne fonctionne que dans les vues (controller => PHP Fatal error: Call to a member function date_jour() on boolean), ou alors je dois recopier dans appcontroller ma fonction, ce qui m'oblige à changer 2 fichiers lorsque je modifie mon helper date

 public function date_jour($date){

    $test = Time::parse($date); 
    $date = $test->i18nFormat('yy-MM-dd');
    return $date;
}

quelle serait selon vous la meilleure méthode pour réaliser cela ?
Merci.

3 réponses


Xeta
Réponse acceptée

Hello,

Si tu veux utiliser une fonction custom à la fois dans les Vues et dans les Controllers, alors créer toi une classe Utility ou quelque chose de ce genre. Car avec les Helpers, comme tu l'a dit, tu pourras que dans les Vues, et avec les Components, tu pourras que dans les Controllers.

Par exemple, tu peux faire ça. (Tu peux lui mettre le nom que tu veux) :
src/Utility/TimeParser.php

namespace App\Utility;

use Cake\I18n\Time;

class TimeParser
{
    /**
     * Parse a Date and return it with the format 'yy-MM-dd'.
     *
     * @param string $date The date to parse.
     *
     * @return false|string
     */
    public static function dateJour($date)
    {
        if (empty($date)) {
            return false;
        }

        $parsed = Time::parse($date);
        $date = $parsed->i18nFormat('yy-MM-dd');

        return $date;
    }
}
//Pour l'utiliser :
use App\Utility\TimeParser;

$date = TimeParser::dateJour($date);

//Ou
$date = \App\Utility\TimeParser::dateJour($date);
alexyon
Auteur

Merci Xeta, je vois que c'est le même principe que ta classe Arrayor sur ton depot.
je vais tester ca...

Ouep, c'est pareil. Tu peux même changer le nom du dossier Utility par ce que tu veux.