@jazzus

Как передать название метода в переменную в Laravel?

Мне нужно название метода со скобками передать в переменную. И как это прописать я не знаю. Пробовал ‘metod()’ и другие подборы паролей - не выходит.

Статусы в модели

//Опубликован
  public function active()
  {
      return 1;
  }

  //Не опубликован
  public function inactive()
  {
      return 2;
  }

  //Проверка 
  public function isActive()
  {
      if ($this->status_id==$this->active()) return true;
      return false;
  }
  //Обновление статуса
  public function statusUpdate($status)
  {
      $this->update(['status_id'=>$this->$status]);
  }


Мне нужно из контроллеров в statusUpdate($status) в переменную $status передать название метода. Как это сделать? Пробовал по разному в контроллере писать, например

$product->statusUpdate('active()');
не работает
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Что за ужас вы делаете?

Хорошо, в лоб будет так:
//Обновление статуса
public function statusUpdate($status)
{
    $this->update(['status_id'=>$this->{$status}()]);
}

$product->statusUpdate('active');


Нормально, вот так:
class Foo
{
    public const ACTIVE  = 1;
    public const INACTIVE  = 2;
    
    public function isActive()
    {
        return $this->status_id === static::ACTIVE;
    }

    public function statusUpdate($status)
    {
        $this->update(['status_id' => $status]);
    }
}

(new Foo)->statusUpdate(Foo::ACTIVE);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы