Yii2 功能非常強大,組件化編程很高大上,全棧編程很容易,但我以爲平常的開發中仍是有很大一部分人會去手寫表單之類的,爲了配合前端的工做,或者懶得再去學這套堪比一門新語言的組件語法....html
Yii2默認是對錶單採起 CSRF 驗證的,近些年 CSRF 也愈來愈被人們所在乎,它比 XSS 更陰險更精明,有興趣的能夠百度下網絡安全編程方面的相關知識,這裏就再也不累述了。前端
若是是本身手寫的表單,且沒有關閉 Yii2 自身的 CSRF 驗證的話,就會出現 「Unable to verify your data submission」 的錯誤提示,而網上千篇一概的都是教你如何關閉 CSRF 驗證,我也是呵呵了,居心何在?安全編程要貫徹到底,若是你不想過幾年被搞網絡安全的擠下去麼。有幾篇教你如何使本身的表單符合 CSRF 驗證,但都是 Yii 版本的,組件的寫法都與如今的 Yii2 大有不一樣編程
下面給出正確的表單寫法安全
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>FormValidate</title> </head> <body> <div> <form method="post" action=""> <input type="text" name="username"> <input type="submit" value="submit"> <!-- _csrf --> <input type="hidden" name="<?= \Yii::$app->request->csrfParam; ?>" value="<?= \Yii::$app->request->getCsrfToken();?>"> </form> </div> </body> </html>
即在表單中添加一個 網絡
name : app
\Yii::$app->request->csrfParam;
value:組件化
\Yii::$app->request->getCsrfToken();
的input hidden元素便可post
輸出 request 組件其實就能看到一個公共的成員屬性 spa
public $csrfParam = '_csrf';
固然你直接寫也能夠code