여기 거래가 있습니다. 아래의 ActiveForm은 $ tt (라디오)와 $ value (문자열 숫자 입력)의 두 변수를 받아 컨트롤러로 보냅니다.비동기 적으로 컨트롤러에 값을 제출 하시겠습니까? yii2
$ 값은 InputField 모델에 정의 된 다른 규칙과 시나리오를 기반으로 유효성을 검사해야합니다. $ tt는 라디오 값이므로 지금은 규칙을 정의하지 않습니다.
트릭은 $ value에 대한 일종의 입력 유효성 검사가 있고 그 규칙이 사용자가 $ tt 값으로 설정 한 값에 따라 변경되어야한다는 것입니다. 이런 종류의 구성으로, 컨트롤러는 $ tt도 $ 값도받지 못한다. 나는 그 이유가 규칙에 상충되는 것이라고 생각한다.
이상적으로, 저는 컨트롤러에 확인 된 라디오 $ tt 값 (jQuery 또는 smthng)을 보내고 컨트롤러에 대해 모델에 대한 시나리오를 설정하여 적절한 유효성 검사 규칙을 설정하도록하고 싶습니다. 뷰의 $ 값이 작동합니다.
Yii2 전문가 : 1) 왜 내 컨트롤러가 어떤 가치를받지 못하는지 설명 할 수 있습니까? 2) 내가 할 계획이었던 것을 제안 해 주시겠습니까?
`
//보기 조각
$valueForm = ActiveForm::begin([
'id' => 'input-field',
'action' => ['value-search/index'],
'method' => 'post',
'options' => ['class' => 'form-horizontal'] ]); ?>
<?= $valueForm->field($valueModel, 'tt')
->radioList(['P_sat'=>'Sat. Pressure', 'T_sat'=>'Sat. Temperature'])
->label('Select table type'); ?>
<?= $valueForm->field($valueModel, 'value')
->textInput(['options' => ['type'=>'number', 'name'=>'value','id'=>'value']]); ?>
<?php ActiveForm::end() ?>
// 모델
class InputField extends \yii\base\Model
{
const SCENARIO_PSAT = 'P_sat';
const SCENARIO_TSAT = 'T_sat';
public $tt;
public $value;
public function scenarios() {
return [
self::SCENARIO_PSAT => ['tt','value'],
self::SCENARIO_TSAT => ['tt','value'],
];
}
public function rules() {
return [
['tt','safe'],
['value', 'double', 'numberPattern' => '/[0-9]+?(\.[0-9]{0,5})?/', 'min' => 0, 'max' => 22064,
'on' => self::SCENARIO_PSAT],
['value', 'double', 'numberPattern' => '/[0-9]+?(\.[0-9]{0,5})?/', 'min' => 0, 'max' => 373.95,
'on' => self::SCENARIO_TSAT],
];
}
컨트롤러에서 10,403,210는 // 영업 활동
public function actionIndex()
{
$inputModel = new InputField;
$inputModel->load(\Yii::$app->request->post());
$tt = $inputModel->tt;
switch($tt) {
case 'P_sat': $inputModel->scenario = $inputModel::SCENARIO_PSAT;
break;
case 'T_sat': $inputModel->scenario = $inputModel::SCENARIO_TSAT;
break;
default: throw new UserException('setTableType is not returning shit');
}
if ($inputModel->validate('value')) {
$searchValue = $inputModel->value;
$this->test = $inputModel->tt;
$this->test2 = $inputModel->value;
} else {
throw new UserException('Input is not validated');
}
return $this->render('index', [
//'provider' => $provider,
'array' => $this->test,
'array2' => $this->test2
]);
}
`
모델에서 $의 TT와 $ 값을받을 해야하는 모두 테스트 및 TEST2가, NULL이다 :(
제출 버튼은 어디에 있습니까? 왜 클라이언트 측 유효성 검사를 사용하지 않았습니까? [예제를 확인하십시오] (http://www.yiiframework.com/doc-2.0/guide-input-validation.html#creating-validators) –
시간에 제출 버튼을 사용하지 않았습니다 : /. 대신 enter를 사용하여 값을 제출했습니다. 그러나 어떤 이유로 든 validate()에 의한 서버 측 유효성 검사를 방해하는 것이있었습니다. 그런 다음 시나리오를 제거하고 "키워드"를 사용하여 특정 규칙을 실행했습니다. 하지만 validate()는 여전히 작동하지 않았으므로 서버의 데이터를 확인하는 별도의 함수를 만들어야했습니다. –