Класс Restler с необходимыми параметрами в зависимости от типа метода

Допустим, у меня есть это для использования с моими классами API.

class EventInfo {
    /// @var int $start The Start time
    public $start

    /// @var string $url The URL for the event {@required false}
    public $url = null;
}

И теперь я хочу использовать EventInfo как для своих методов POST, так и для методов PATCH. Когда я выполняю POST, $start является обязательным свойством, которое необходимо установить. $url станет необязательным параметром.

Однако, когда я выполняю операцию PATCH, $start больше не требуется. Возможно, я прохожу новое время начала, а может и нет.

Как это указать?


person Gargoyle    schedule 29.01.2017    source источник


Ответы (1)


Сначала используйте синтаксис DocBlock.

class EventInfo {
    /**
     * @var int $start The Start time
     */
    public $start;

    /**
     * @var string $url The URL for the event {@required false}
     */
    public $url = null;
}

Это устанавливает обязательные и необязательные свойства по умолчанию. Затем вы можете управлять необходимыми свойствами на уровне метода API, используя комментарий {@required }. См. пример ниже

class Home
{
    public function index()
    {
        return array(
            'success' => array(
                'code' => 200,
                'message' => 'Restler is up and running!',
            ),
        );
    }

    public function patch(EventInfo $info)
    {
        return func_get_args();
    }

    /**
     * @param EventInfo $info {@required start,url}
     * @return array
     */
    public function post(EventInfo $info)
    {
        return func_get_args();
    }
}

Вы также можете добавить комментарий {@properties start} аналогичным образом, чтобы ограничить, какие свойства необходимы методу API.

person Arul Kumaran    schedule 30.01.2017
comment
Это не ответ на вопрос, поскольку он у меня уже есть. $start всегда будет требоваться с тем, что вы показали. - person Gargoyle; 30.01.2017
comment
Как добавить необходимые свойства, а не просто заменить их? Если в моем классе есть 10 свойств, и 8 из них обязательны, а теперь я хочу, чтобы мой метод также сделал два других обязательными, похоже, мне придется перечислить все 10 из них в строке @param EventInfo. Я хотел бы иметь возможность просто перечислить два, которые обычно не требуются, и чтобы все 10 были обязательными. - person Gargoyle; 03.02.2017
comment
После переопределения вы должны предоставить полный список. Это единственный способ получить полный контроль - person Arul Kumaran; 03.02.2017