2015-09-22 1 views
2

Я создаю REST-полный API с CRUD-действиями в Yii 2.0, и мне нужна помощь для действия обновления.Как сделать вызов CURL из линии CMD (Win 7) в действие MVC с параметром?

В моем Yii 2.0 контроллера MVC я действие создания и обновления следующим образом:

public function actionCreate() 
{ 
    ... 
} 

Для создания действия я могу сделать CURL успешно вызывает с помощью команды:

curl -X POST -d column_one=create_test1 -d column_two=create_test2 http://localhost/MyApp/web/tabletest/create 

И после этот вызов, новая строка в моей таблице с указанными выше значениями для столбцов успешно создана.

Теперь мне нужно сделать CURL призывы к действию обновления, а также:

public function actionUpdate($id) 
{ 
    ... 
} 

Я пробовал много вариаций этой команды (теперь у нас есть параметр в функции, и я не уверен, как это передать - предположим, что $id=2). Это лишь немногие из тех, что я пробовал, никто не работает:

curl -X PUT -d column_two=updated_cmd_2 http://localhost/MyApp/web/tabletest/update/2 

curl -X PUT -d "column_two=updated_cmd_2" "http://localhost/MyApp/web/tabletest/update/2" 

curl -X PUT -d "id=2&column_two=updated_cmd_2" "http://localhost/MyApp/web/tabletest/update" 

Но в большинстве случаев я получил ошибку:

Bad Request (#400) 

* Примечание: создать метод определяется как метод POST, а метод обновления определяется как метод PUT, поэтому тип метода не является проблемой в этом случае. Я думаю, что формат запроса CURL для обновления неверен.

ответ

0

Я решил проблему путем замены одной из моих пользовательских действий в контроллере:

public function beforeAction($action) 
{ 
    if($this->action->id == 'create'){ 
     $this->enableCsrfValidation = false; 
    } 

    return parent::beforeAction($action); 
} 

в:

public function beforeAction($action) 
{ 
    if($this->action->id == 'create' || $this->action->id == 'update'){ 
     $this->enableCsrfValidation = false; 
    } 

    return parent::beforeAction($action); 
} 

и теперь:

curl -X PUT -d column_two=updated_cmd_2 http://localhost/MyApp/web/tabletest/update/2 

работает.

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