2016-07-18 8 views
0

laravel 5.2を使用すると、私はWebベースでありAPIを提供するアプリケーションを持っています。 API要求はトークンガードを使用して認証され、Web要求はセッションガードを使用して認証されます。日付を変更して、API呼び出しのUnixタイムスタンプとWeb呼び出しのデフォルトの日付文字列(Y-m-d)として返すようにしたいと考えています。私が思いつくことができる最高ののは、API呼び出しのための別個のモデルを持っていることですが、これが多形性関係の問題につながることをすぐに発見しました。誰もこれを達成する方法についての提案を持っていますか?laravel api呼び出し専用の日付変更

答えて

0

JSONのシリアライズを使用して、希望のフォーマットの日付を提供する新しいプロパティを追加できます。

https://laravel.com/docs/master/eloquent-serialization#appending-values-to-json

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class MyModel extends Model 
{ 

    protected $appends = ['my_date']; 

    /** 
    * Format date for API calls. 
    * 
    * @return string 
    */ 
    public function getMyDateAttribute() 
    { 
     return $this->attributes['created_at'] == // format Carbon date here. 
    } 
} 

あなたはAPI呼び出しによって返されたJSONで新しいmy_date性質を持っています。

+0

これは問題のための最良の解決策だと思います。なぜなら、返されたJSONに2つの異なる形式を返すというトレードオフを使って、データベースでデフォルトの日付形式を維持できるからです。それが問題であれば、$ hidden配列に不必要な日付を追加することが解決されるかもしれません。また、これを読んだ人は、$ appends配列をモデルに追加することを忘れないでください。上記の例では、 'protected $ appends = [' my_date '];'うまくいくはずです。 – dsuelzle

+0

ああ、 '$ appends' - 忘れました。私の答えを更新しました。 – swatkins

0

モデルに関数をドロップして、その属性をどのようにフォーマットするかを指定できます。

public function formatDateForView() 
{ 
    return date('Y-m-d', $this->attributes['your_timestamp_field']); 
} 

あなたの意見では、必要に応じて電話するだけです。

{{ $yourModel->formatDateForView(); }} 
+0

私はあなたが何を意味しているのか見ています。それは、Web側だけに変異を起こす方法を提供するので、私が後にしているものとは逆です。理想的には、私はデータベースのデフォルトの形式を維持し、API呼び出しのためにのみ変更できるようにしたいと考えています。 – dsuelzle

関連する問題