如果我使用 select2 小部件,如何 post 来自 table 的记录的实际主键而不是 php Yii2 中数组的索引?
How to post actual primary keys of records from table and not indexes of an array in php Yii2 if I use select2 widget?
我在controller里面的函数如下:
public function actionProjects($id)
{
$model = $this->findModel($id);
$projects = Project::find()->all();
$projectIds = Yii::$app->request->post('projects');
if (Yii::$app->request->isPost) {
Yii::$app->session->setFlash('success');
$model->unlinkAll('projects');
if ($projectIds) {
foreach ($projectIds as $projectId) {
$project = Project::findOne(abs((int)$projectId));
if ($project) {
$model->link('projects', $project);
}
}
}
}
print_r($projectIds);
return $this->render('projects', ['projects' => $projects, 'model' => $model]);
}
我的看法如下:
<?php
...
function sortArray($a, $b)
{
return strcmp($a, $b);
}
$projects = ArrayHelper::map($projects, 'id', 'title');
usort($projects, 'sortArray');
?>
<div class="application-create x_panel">
<div class="x_title"><h3><?= Html::encode($this->title) ?></h3></div>
<div class="x_content">
<?php $form = ActiveForm::begin(); ?>
<div class="form-group">
<?= Select2::widget([
'name' => 'projects[]',
'options' => ['placeholder' => 'Выберите проект...'],
'language' => 'ru',
'value' => array_keys(ArrayHelper::map($model->projects, 'id', 'title')),
'data' => $projects,
'pluginOptions' => [
'allowClear' => true,
'multiple' => true
],
]) ?>
</div>
<div class="form-group">
<?= Html::submitButton('Обновить', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end() ?>
</div>
</div>
当我 select 来自 select2 的单个或多个项目,并单击更新按钮时 - 此代码:
$projectIds = Yii::$app->request->post('projects');
这样的帖子数组:Array ( [0] => 0 [1] => 1 [2] => 2 )
发送到服务器的数据是项目索引数组,而不是 table 中的实际索引(主键)。 (我在 db table 中有 3 个项目 - 它们的索引是 5,6 和 7)
如何发送 selected 项的主键?我找不到导致我的问题的隐藏老鼠。似乎代码中的一切都是正确的。但实际上不是。
我在controller里面的函数如下:
public function actionProjects($id)
{
$model = $this->findModel($id);
$projects = Project::find()->all();
$projectIds = Yii::$app->request->post('projects');
if (Yii::$app->request->isPost) {
Yii::$app->session->setFlash('success');
$model->unlinkAll('projects');
if ($projectIds) {
foreach ($projectIds as $projectId) {
$project = Project::findOne(abs((int)$projectId));
if ($project) {
$model->link('projects', $project);
}
}
}
}
print_r($projectIds);
return $this->render('projects', ['projects' => $projects, 'model' => $model]);
}
我的看法如下:
<?php
...
function sortArray($a, $b)
{
return strcmp($a, $b);
}
$projects = ArrayHelper::map($projects, 'id', 'title');
usort($projects, 'sortArray');
?>
<div class="application-create x_panel">
<div class="x_title"><h3><?= Html::encode($this->title) ?></h3></div>
<div class="x_content">
<?php $form = ActiveForm::begin(); ?>
<div class="form-group">
<?= Select2::widget([
'name' => 'projects[]',
'options' => ['placeholder' => 'Выберите проект...'],
'language' => 'ru',
'value' => array_keys(ArrayHelper::map($model->projects, 'id', 'title')),
'data' => $projects,
'pluginOptions' => [
'allowClear' => true,
'multiple' => true
],
]) ?>
</div>
<div class="form-group">
<?= Html::submitButton('Обновить', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end() ?>
</div>
</div>
当我 select 来自 select2 的单个或多个项目,并单击更新按钮时 - 此代码:
$projectIds = Yii::$app->request->post('projects');
这样的帖子数组:Array ( [0] => 0 [1] => 1 [2] => 2 )
发送到服务器的数据是项目索引数组,而不是 table 中的实际索引(主键)。 (我在 db table 中有 3 个项目 - 它们的索引是 5,6 和 7)
如何发送 selected 项的主键?我找不到导致我的问题的隐藏老鼠。似乎代码中的一切都是正确的。但实际上不是。