2016-04-28 12 views
0

私はそのように定義されているアクセサがあります。今Laravelアクセサにパラメータを追加

public function getNameAttribute($name) 
{ 
    return trans($name); 
} 

、私は私の翻訳にパラメータを追加したいと思いますので、私はそのようなことがしたい:

public function getNameAttribute($name) 
{ 
    return trans($name, ['age' => $age]); 
} 

可能ですか?どのようにアクセサーを定義し、どのようにparamを呼び出す必要がありますか?

EDIT 1:ここに私のモデルは属性を示します。

protected $fillable = [ 
    'id', 
    'name', 
    'gender', 
    'isTeam', 
    'ageCategory', 
    'ageMin', 
    'ageMax', 
    'gradeCategory', 
    'gradeMin', 
    'gradeMax', 
]; 

そして、ここでは、私は私のモデル内の$ age変数を取得する方法である:

public function getAgeString() 
{ 
    $ageCategoryText = ''; 
    $ageCategories = [ 
     0 => trans('core.no_age'), 
     1 => trans('core.children'), 
     2 => trans('core.students'), 
     3 => trans('core.adults'), 
     4 => trans('core.masters'), 
     5 => trans('core.custom') 
    ]; 

    if ($this->ageCategory != 0) { 
     if ($this->ageCategory == 5) { 
      $ageCategoryText = ' - ' . trans('core.age') . ' : '; 
      if ($this->ageMin != 0 && $this->ageMax != 0) { 
       if ($this->ageMin == $this->ageMax) { 
        $ageCategoryText .= $this->ageMax . ' ' . trans('core.years'); 
       } else { 
        $ageCategoryText .= $this->ageMin . ' - ' . $this->ageMax . ' ' . trans('core.years'); 
       } 

      } else if ($this->ageMin == 0 && $this->ageMax != 0) { 
       $ageCategoryText .= ' < ' . $this->ageMax . ' ' . trans('core.years'); 
      } else if ($this->ageMin != 0 && $this->ageMax == 0) { 
       $ageCategoryText .= ' > ' . $this->ageMin . ' ' . trans('core.years'); 
      } else { 
       $ageCategoryText = ''; 
      } 
     } else { 
      $ageCategoryText = $ageCategories[$this->ageCategory]; 
     } 
    } 
    return $ageCategoryText; 
} 
+0

$年齢はあなたのモデルの属性ですか? –

+0

@JoseRojasそれ以外の場合は$ this-> ageとなることはできません。 –

+0

mmm nop、$ this-> ageMin、$ this-> ageMaxの2つのモデル属性で作成された文字列です。 –

答えて

2

あなたは2つのオプション、まず

を持っています:

属性名としてメッセージを翻訳したい場合は、これを試すことができます:

public function getNameAttribute($name) 
{ 
    return trans($name, ['age' => $this->getAgeString()]); 
} 

第二:

あなたが翻訳などの追加のフィールドをしたい場合は、あなたのモデルにAPPENDを追加Mutatorを使用することができます。

protected $appends = array('nameWithAge'); 

名を取得する方法を定義します
public function getNameWithAgeAttribute() 
{ 
    return trans($this->attributes['name'], ['age' => $this->getAgeString()]); 
} 

これは、モデルのより多くの属性に名前を付けるために行います。これは、s uch。

+0

それはされていないはずです:$ name、['age' => $ this-> nameWithAge] –

+0

あなたがミューテータオプションNoを選択した場合、これは変換したい他の属性に基づいています。この場合はgetAgeStringは2つの解決策です。申し訳ありません。私が理解できない場合は –

+0

OKです。私はそれを得ました...試してみましょう。 –

関連する問題