Soluzione 1: Nel caso in cui le azioni di tutto il controller vi consegneranno JSON si può anche considerare extanding yii\rest\Controller invece di Yii \ web \ Controller:
namespace app\controllers;
use Yii;
class UserController extends \yii\rest\Controller
{
public function actionRegister()
{
$username = Yii::$app->request->post('username');
return $username;
}
}
NOTA : è inoltre possibile utilizzare che si estende yii\rest\Controller (vedere rest docs) se è necessario gestire le operazioni CRUD.
Soluzione 2: Un approccio diverso quando estendentesi yii\web\Controller è usando yii\filters\ContentNegotiator. Si noti che l'impostazione $enableCsrfValidation
a falso può essere obbligatorio qui come è spiegato nella sua related docs:
Sia per abilitare CSRF (Cross-Site Request Forgery) convalida. Il valore predefinito è true. Quando la convalida CSRF è abilitata, i moduli inviati a un'applicazione Web Yii devono essere originati dalla stessa applicazione. In caso contrario, verrà sollevata un'eccezione 400 HTTP.
Nota: questa funzione richiede che il client utente accetti i cookie. Inoltre, per utilizzare questa funzione, i moduli inviati tramite il metodo POST devono contenere un input nascosto il cui nome è specificato da $ csrfParam. È possibile utilizzare yii \ helpers \ Html :: beginForm() per generare il proprio input nascosto.
Il codice di cui sopra può essere riscritta in questo modo:
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\filters\ContentNegotiator;
use yii\web\Response;
class UserController extends Controller
{
public $enableCsrfValidation = false;
public function behaviors()
{
return [
'contentNegotiator' => [
'class' => ContentNegotiator::className(),
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
'only' => ['register'],
],
];
}
public function actionRegister()
{
$username = Yii::$app->request->post('username');
return $username;
}
}
fonte
2016-01-28 09:50:16
set formato di risposta a '\ Yii \ web \ Response :: FORMAT_JSON;' –
Insane è giusto. Utilizza \ yii \ web \ Response :: FORMAT_JSON; – frops
aggiungi il campo nascosto nel modulo per csrf: '' –