Laravel 5

Date avec laravel 5

  • Avatar de KênêyaProject
    Membre depuis :
    10/09/2018
    Messages :
    6

    Salut à tous!
    Deux soucis m'envoie vers la communauté!
    le premier est un problème d'affichage qui ne me plait pas.
    en effet, je recupère la date de publication d'un article depuis la base de donnée et l'affiché dans la vue.
    le soucis est qu'il affiche comme suit : 01/01/2018 alors que moi je souhaite un truc du genre
    le 10 septembre 2018.

    Dans AppServiceprovider j'ai cette ligne de code :

    setlocale(LC_TIME, config('app.locale'));

    ce qui me permet de faire ceci dans ma vue :

    {{ $articles->created_at->formatLocalized('%c') }}

    Quelle est l'alternative ?

    Le second, est au niveau du slug lors de la modification qui ne marche pas.
    model Article

    use Sluggable;
    public function sluggable()
    {
    return [
    'slug' => [
    'source' => 'title'
    ]
    ];
    }
    protected $fillable = [
    'title', 'image', 'description', 'slug'
    ];

    Lors de l'ajout sa marche mais à la modification le champ slug ne se modifie pas!
    Vos suggestions sont les bien venu.
    Merci la communauté!

  • Avatar de LECORREFabien
    Membre depuis :
    11/09/2018
    Messages :
    1

    Salut,

    Dans le constucteur de ton controller tu peux mettre ce code :

    public function __construct(){
    setlocale(LC_TIME, 'fr_FR');
    }

    et dans ta view tu peux mettre ça :

    {{ $article->created_at->formatLocalized('%d %B %Y') }} //11 septembre 2018

    Pour ton deuxième problème je peux te donner un exemple qui fonctionne chez moi sur le model User :

    use Illuminate\Auth\MustVerifyEmail;
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract;

    use Cviebrock\EloquentSluggable\Sluggable;

    class User extends Authenticatable implements MustVerifyEmailContract
    {
    use Notifiable, MustVerifyEmail, Sluggable;

    /
    The attributes that are mass assignable.

    @var array
    /
    protected $fillable = [
    'name', 'email', 'password',
    ];

    /

    The attributes that should be hidden for arrays.

    @var array
    /
    protected $hidden = [
    'password', 'remember_token',
    ];

    public function sluggable()
    {
    return [
    'slug' => [
    'source' => 'name'
    ]
    ];
    }
    }

    La différence je pense est que je n'ai pas mis le champ "slug" de ma table en protected $fillable.
    Voilà j'espère que ça t'aideras :)

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Pour la date pour éviter les soucis prévoir un utf8_encode.

  • Avatar de KênêyaProject
    Membre depuis :
    10/09/2018
    Messages :
    6

    Merci beaucoup pour l'intérêt accordé à mon soucis!
    J'ai essai de retirer le slug dans la partie $fillable mais à la modification le slug ne se modifie pas.

    Pour la date j'ai bien suivi les instructin mais dans la vue j'ai pas retour, la partie created_at est vide avec votre methode.
    Je pense avoir suivi à la lettre.

    class PageController extends Controller
    {
    public function __construct(){
    setlocale(LC_TIME, 'fr_FR');
    }
    public function actu(){
    $articles = Article::paginate(4);

    return view('front.actualites.actualites', compact(['articles']));
    }
    }

    et dans la vue:

    {{ $article->created_at->formatLocalized('%d %B %Y') }} // Vide
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Vérifie si tu as toutes les infos :

    $articles = Article::paginate(4);
    dd($articles);

    Remarque : avec Carbon 2 (mais pour le moment Laravel utilise encore la version 1) on conseille plutôt d'utiliser isoFormat à la place de formatLocalized. Mais ça va pas résoudre une donnée vide...

  • Avatar de KênêyaProject
    Membre depuis :
    10/09/2018
    Messages :
    6

    La variable articles n'est pas vide!
    Lorque je recupère created_at avec le carbon sa fonctionne bien sauf que je veux pas l'affiche 01/01/2018.
    Quand j'utilise cette fonction pour afficher created_at, ça ne retoune rien (vide).
    Je viens d'éssayé isoFormat mais erreur

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Pour le français pour setlocale il faut fr_FR, c'est bien ce que tu as ?

  • Avatar de KênêyaProject
    Membre depuis :
    10/09/2018
    Messages :
    6

    Bien sûr que Oui.

    class PageController extends Controller

    {
    public function __construct(){
    setlocale(LC_TIME, 'fr_FR');
    }

    public function actu(){
    $articles = Article::paginate(4);
    return view('front.actualites.actualites', compact(['articles']));
    }

    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Elle est pourtant toute simple cette fonction :

    public function formatLocalized($format)
    {
    // Check for Windows to find and replace the %e modifier correctly.
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    $format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format); // @codeCoverageIgnore
    }

    $formatted = strftime($format, strtotime($this->toDateTimeString()));

    return static::$utf8 ? utf8_encode($formatted) : $formatted;
    }

    Il faudrait déboguer là dedans...

Vous ne pouvez pas répondre à ce sujet.