yii2
확인
수색…
Yii2에서 데이터베이스의 고유 한 값 확인
기존 값이 텍스트 상자에 입력되면 오류 메시지가 표시되지 않는 문제는 거의 없습니다.
예를 들어 사용자가 기존 이메일 을 입력 하도록 허용하지 않습니다 .
signup.php
(기존 이메일 ID없이 새 사용자를 등록하려는 페이지)
-
use yii\bootstrap\ActiveForm;
제거하십시오use yii\bootstrap\ActiveForm;
(있는 경우) -
use yii\widgets\ActiveForm;
추가하십시오use yii\widgets\ActiveForm;
-
'enableAjaxValidation' => true
추가하십시오 (사용자가 기존 이메일 ID를 입력하는 것을 중단하려는 필드에서).
<?php
use yii\bootstrap\ActiveForm;
use yii\widgets\ActiveForm;
?>
<?= $form->field($modelUser, 'email',['enableAjaxValidation' => true])
->textInput(['class'=>'form-control','placeholder'=>'Email']); ?>
제어 장치
상단에 다음 줄을 추가하십시오 use yii\web\Response;use yii\widgets\ActiveForm;
<?php
use yii\web\Response;
use yii\widgets\ActiveForm;
.
.// Your code
.
public function actionSignup() {
$modelUser = new User();
//Add This For Ajax Email Exist Validation
if(Yii::$app->request->isAjax && $modelUser->load(Yii::$app->request->post())){
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($modelUser);
}
else if ($model->load(Yii::$app->request->post())) {
}
}
?>
모델
[['email'],'unique','message'=>'Email already exist. Please try another one.'],
데이터베이스에서 고유 한 값 확인 : 고유 한 유효성 검사
일부 사람들은 기존 값을 입력 할 때 표시되지 않는 오류 메시지와 관련된 문제가 있습니다. 예를 들어 기존 이메일에 사용자 가입을 허용하지 않습니다.
전망
<?php
......................
<?= $form->field($modelUser, 'email')->textInput(['class'=>'form-control','placeholder'=>'Email']) ?>
......................
제어 장치
<?php
use yii\web\Response; // important lines
use yii\widgets\ActiveForm; // important lines
.
.// Your code
.
public function actionSignup()
{
$modelUser = new User();
//Add This For Ajax Validation
if(Yii::$app->request->isAjax && $modelUser->load(Yii::$app->request->post())){
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($modelUser);
}
if ($modelUser->load(Yii::$app->request->post()) && $modelUser->save()) {
return $this->redirect(['someplace nice']);
}
return $this->render('update', [
'modelUser' => $modelUser,
]);
}
모델
public function rules()
{
return [
..............
['email', 'unique', 'message'=>'Email already exist. Please try another one.'],
...........
]
}
포커스 / 키 업에서 유효성 검사 오류 메시지 사용 안 함
기본적으로 오류 메시지는 keyUp의 <div class="help-block"></div>
에있는 textbox
아래에 표시되거나 유효성 제한 조건이 충족되지 않으면 제출 버튼을 누른 후 나타납니다.
때로는 onKeyup
이벤트에서만 유효성 검사를 제출할 때 메시지가 필요합니다.
yii2/widgets/ActiveForm.php
파일을 확인해 봅시다 :
<?php
namespace yii\widgets;
use Yii;
use yii\base\InvalidCallException;
use yii\base\Widget;
use yii\base\Model;
use yii\helpers\ArrayHelper;
use yii\helpers\Url;
use yii\helpers\Html;
use yii\helpers\Json;
class ActiveForm extends Widget
{
public $action = '';
public $method = 'post';
public $options = [];
.
.
.
public $validateOnSubmit = true;
public $validateOnChange = true;
public $validateOnBlur = true;
public $validateOnType = false;
.
.
.
}
$validateOnBlur
는 기본적으로 true
로 설정되어 있습니다. 프레임 워크 파일을 변경하는 것은 매우 나쁜 일이므로 양식을 사용할 때 재정의해야합니다.
<?php $form = ActiveForm::begin([ 'id' => 'register-form','validateOnBlur' => false]); ?>
유효성 검사 시나리오
시나리오를 사용하면 다른 상황에서 유효성 검사를 수행 할 수 있습니다.
모델 클래스에서 시나리오 정의
class User extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'user_master';
}
// define validation in rule() function
public function rules()
{
return [
[['email_id'],'email'],
[['first_name',],'required','on'=>['create','update']], // create scenario
[['email_id',],'required','on'=> ['admin','create','update','forgotpassword']],
[['mobile',],'required','on'=>['admin','create','update']],
];
}
}
컨트롤러에서 시나리오 사용
public function actionCreate()
{
$model = new User();
$model->scenario="create"; // use create scenario, create scenario validaion applied in this model
}
public function actionUpdate()
{
$model = new User();
$model->scenario="update"; // use update scenario, update scenario validaion applied in this model
}
배열 유효성 검사
Yii2 버전 2.0.4에는 배열의 각 항목을 확인하는 데 사용되는 EachValidator가 있습니다.
[
// ... other rules
['userIDs', 'each', 'rule' => ['integer']],
]
['integer']
부분은 Yii2가 제공하는 모든 다른 유효성 검사기 객체 일 수 있으며 유효성 검사기에 대한 특정 인수를 보유 할 수 있습니다. 유사 : ['integer', 'min' => 1337]
. 사용자 ID에 배열이 포함되어 있지 않으면 규칙 유효성 검사가 실패합니다.
내용의 유효성을 검사하지 않고 속성에 배열이 포함되어 있는지 확인하려는 경우에는 자체 유효성 검사기를 작성할 수 있습니다.
[
['myAttr', function($attribute, $params) {
if (!is_array($this->$attribute)) {
$this->addError($attribute, "$attribute isn't an array!");
}
}]
]