Rozwiązanie 1: W przypadku, gdy wszystkie działania kontroler będzie dostarczać json Można również rozważyć extanding yii\rest\Controller zamiast yii \ web \ Kontroler:
namespace app\controllers;
use Yii;
class UserController extends \yii\rest\Controller
{
public function actionRegister()
{
$username = Yii::$app->request->post('username');
return $username;
}
}
UWAGA : możesz również użyć , która rozszerza yii\rest\Controller (patrz rest docs), jeśli potrzebujesz obsługi operacji CRUD.
Roztwór 2: Innym podejściem przy rozszerzaniu yii\web\Controller jest za pomocą yii\filters\ContentNegotiator. Należy pamiętać, że ustawienie $enableCsrfValidation
do fałszywy może być obowiązkowe tutaj jak to wyjaśniono w swojej related docs:
czy włączyć CSRF (Cross-Site żądania fałszerstwo) zatwierdzenie. Domyślnym ustawieniem jest true. Gdy funkcja sprawdzania CSRF jest włączona, formularze przesłane do aplikacji WWW Yii muszą pochodzić z tej samej aplikacji. Jeśli nie, zostanie zgłoszony wyjątek HTTP 400.
Uwaga: ta funkcja wymaga, aby klient użytkownika akceptował pliki cookie. Ponadto, aby móc korzystać z tej funkcji, formularze przesłane za pomocą metody POST muszą zawierać ukryte wejście o nazwie określonej przez $ csrfParam . Możesz użyć yii \ helpers \ Html :: beginForm(), aby wygenerować ukryte dane wejściowe.
Powyższy kod może zostać przepisany w następujący sposób: format odpowiedzi
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;
}
}
zestaw do '\ Yii \ Web \ Response :: FORMAT_JSON;' –
Insane ma rację. Użyj \ yi \ web \ Response :: FORMAT_JSON; – frops
dodaj ukryte pole w formularzu dla csrf: '' –