我有一些发送模拟数据的 js 脚本:
$.ajax({
type: "POST",
url: '/manage/add-shops/',
data: {'id':id, 'shops': shops}
'shops' 是包含约 1000 个元素的数组,因此我应该通过 POST 发送它。 我有一个带有方法的 yii2 Controller :
class ManageController extends Controller {
public function actionAddShops($id, $shops=array()) {
....
}
路由正常,但出现此错误:
"Missing required parameters: id"
看起来 POST 参数没有映射到方法参数。 谢谢。
最佳答案
你是对的,出于某种原因,Yii2 只自动绑定(bind) GET 变量,但不幸的是不是 POST。
但是,您可以轻松地进行魔术绑定(bind);您所要做的就是重写 Controller 的 runAction()
。如果您不想为每个 Controller 手动执行此操作,只需创建一个基本 Controller 并在需要时从中扩展。检查以下代码段:
public function runAction($id, $params = [])
{
// Extract the params from the request and bind them to params
$params = \yii\helpers\BaseArrayHelper::merge(Yii::$app->getRequest()->getBodyParams(), $params);
return parent::runAction($id, $params);
}
然后您将能够像在 Yii1 中一样正常访问您的 Controller 操作 $id
和 $shops
。
希望这对您有所帮助。
关于php - yii2 POST参数映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209465/