2016-05-12 5 views
1

мой файл контроллера внутри API/v1/контроллер/Загрузить файл в Rest API yii2

class ProfileController extends ActiveController 
{ 
public $modelClass = 'app\models\Profile'; 

public function behaviors() 
{ 
    return [ 
     [ 
      'class' => 'yii\filters\ContentNegotiator', 
      'only' => 
        ['index', 'view', 'createnew','update','search'], 
      'formats' => 
        ['application/json' => Response::FORMAT_JSON,], 

     ], 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'index' => ['get'],    
       'view' => ['get'],    
       'createnew' => ['post'],  
       'update' => ['put'],   
       'delete' => ['delete'],   
       'deleteall' => ['post'], 
       'search' => ['get'] 
      ], 

     ] 
    ]; 
} 

public function actionCreatenew() { 
    $model = new Profile(); 
    $model->load(Yii::$app->request->post()); 



    $model->asset = UploadedFile::getInstance($model, 'asset'); 

    $name = $model->user_id; 

    if($model->asset) { 

     $model->asset->saveAs('uploads/'.$name.'. 
         '.$model->asset->extension); 
     $model->asset = $model->asset->name.'.'. 
         $model->asset->extension; 

    } 



    if($model->save()) { 
     echo json_encode(array('status'=>"Success", 
       'data'=>$model->attributes),JSON_PRETTY_PRINT); 
    } else { 
     echo json_encode(array('status'=>"Failure", 
       'error_code'=>400, 
       'errors'=>$model->errors),JSON_PRETTY_PRINT); 
    } 
} 

}

Когда я пытаюсь использовать доступа к этому из Почтальон как: POST http://localhost/myapp/api/v1/profiles

I get Invalid Parameter - yii \ base \ InvalidParamException

Содержание ответа не должно быть массивом.

В чем проблема? помощь была бы признательна !! Благодаря

+0

Я исправил проблему, добавив это в свой файл api/config.php '' urlManager '=> [' enablePrettyUrl '=> true,' enableStrictParsing '=> true,' showScriptName '=> false,' rules ' => [['class' => 'yii \ rest \ UrlRule', 'controller' => ['v1/country', 'v1/profile'], 'extraPatterns' => ['POST createnew' => 'createnew ',],],],],' – Jackhad

ответ

0

Вы должны использовать \yii\web\UploadedFile::getInstanceByName('asset'); вместо GetInstance() проверка этого Link

+0

Спасибо за это (добавлено, как вы упомянули). Но я получаю: «Содержимое ответа не должно быть массивом». не для этого верю. – Jackhad

+1

В какой строке? почему вы повторяете строку json? вы можете просто использовать '' return ['status' => 'success', 'data' => $ model-> attributes]; '' – mohit

+0

Указанная строка - http://imgur.com/riULw0B – Jackhad

2

Вы можете легко получить Одиночные/многоэлементные загруженные файлы с помощью HTTP POST с кодированием форм-данных в Yii2, непосредственно в Yii2 контроллер/действие.

Используйте этот код:

$uploads = UploadedFile::getInstancesByName("upfile"); 
    if (empty($uploads)){ 
     return "Must upload at least 1 file in upfile form-data POST"; 
    } 

    // $uploads now contains 1 or more UploadedFile instances 
    $savedfiles = []; 
    foreach ($uploads as $file){ 
     $path = //Generate your save file path here; 
     $file->saveAs($path); //Your uploaded file is saved, you can process it further from here 
    } 

Если вы используете клиент API почтальона, чтобы проверить, как ваш API работает, вы можете настроить конечную точку загрузки, чтобы работать, как это для мульти-загрузки файлов:

Body form-data params for POST data request

Примечание: Квадратные скобки важны! Почтальон с радостью позволит вам выбрать несколько файлов для загрузки в один слот, но это не будет на самом деле работы. Выполнение этого способа, показанного на скриншоте, делает массив файлов доступным для действия Yii2, через механизм UploadedFile. Это примерно эквивалентно стандартной суперглобальной переменной PHP $_FILES, но с более простым управлением.

Отдельные файлы могут быть загружены с квадратными скобками [] или без них после имени ключа. И, конечно же, вы можете назвать upfile тем, что вам нравится, для вашего соглашения.

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