2016-04-28 3 views
0

У меня есть аксессор, который определяется так:добавить параметр в Laravel аксессу

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

Теперь я хотел бы добавить параметры моего перевода, поэтому я хотел бы иметь что-то вроде этого:

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

Возможно ли это? Как определить элемент доступа, и как я должен называть send param?

EDIT 1: Вот моя модель атрибуты:

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

А вот как я получаю $ возрастную переменную внутри моей модели:

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 варианта,

Первые :

Если вы хотите получить как имя атрибута переведенное сообщение, вы можете попробовать следующее:

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

Второе:

Если вы хотите перевести как дополнительное поле, которое вы можете использовать Mutator добавление добавляемых к модели:

protected $appends = array('nameWithAge'); 

и определить метод, чтобы получить имя

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

Это будет делать, чтобы называтьWithAge атрибутом больше модели, и вы можете получить к нему доступ как s Уч.

+0

не должно быть: return trans ($ name, ['age' => $ this-> nameWithAge] ??? –

+0

Если вы выберете вариант мутатора No, это основано на другом атрибуте, который вы хотите преобразовать, в этом случае getAgeString, 2 решения извините, если я не заставлю меня понять –

+0

ОК, я получил его ... Позвольте мне попробовать, но это имеет смысл –

Смежные вопросы