Yii2仅允许通过POST请求进行操作访问

时间:2018-06-04 00:57:49

标签: php yii2

我创建了一个yii2控制器,用于显示特定用户的数据库统计信息。有一个ajax请求,执行到我的控制器操作,但我想限制只允许POST方法执行此操作。

import random

randNum = random.randint(1, 100)
guesses = 0

for i in range(1, 8):
    guesses = guesses + 1
    print("hi human guess a number 1-100! \n")
    guess = input()
    guess = int(guess)

    if guess > randNum:
        print("your guess is too high")

    elif guess < randNum:
        print("your guess is too low")

    elif guess == randNum:
        print("duuude you're a genius \n")
        print("you needed " + str(guesses) + " guesses")

我需要将<?php use yii\web\Response; namespace app\controllers; use Yii; use yii\filters\AccessControl; use yii\web\Controller; use yii\web\Response; use yii\filters\VerbFilter; use app\models\StatsModel; class DataController extends Controller { /** * {@inheritdoc} */ public function behaviors() { return [ [ 'class' => 'yii\filters\ContentNegotiator', 'only' => ['stats'], 'formats' => [ 'application/json' => Response::FORMAT_JSON ], ], ]; } /** * {@inheritdoc} */ public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ], 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, ], ]; } public function actionStats() { //how can i restrict this action to only POST http method? return StatsModel::find()->all(); } } 限制为HTTP Post方法。

1 个答案:

答案 0 :(得分:0)

通常,您只允许在您的行为中添加类似的内容:

'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'stats' => ['POST'],
            ],
        ],

如果您仅通过ajax访问此操作,则可以在操作中添加以下检查

if(Yii::$app->request->isAjax)
{
    //in case you want to return JSON formatted response
    Yii:$app->response->format = Response::FORMAT_JSON;
}

您也可以查看此食谱:

https://books.google.com.sv/books?id=CJrcDgAAQBAJ&pg=PA193&lpg=PA193&dq=yii2+isajax&source=bl&ots=lRFEiPbN3K&sig=MFGo7VostVkxNZDbXGemXrm-qA8&hl=es&sa=X&ved=0ahUKEwjE9ZXSh7nbAhWPk1kKHW3wCeEQ6AEIYTAF#v=onepage&q=yii2%20isajax&f=false

最后,你可以像这样检查你的行动中的帖子

public function actionStats()
{   
     if(Yii::$app->request->isPost())
     {
         //your logic here
         return StatsModel::find()->all();
     }
     else
         //throw an exception or return false
}