Yii 2 폼 만 들 기(ActiveForm)방법 상세 설명

이 글 의 실례 는 Yii 2 가 폼(ActiveForm)을 만 드 는 방법 을 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
양식 은 일부 검증 방면 의 정보 와 관련 되 기 때문에 속성 설정 이 비교적 많 고 복잡 하기 때문에 어디 에 정확 하지 않 은 부분 이 있 는 지 댓 글로 알려 주 십시오.
목차
폼 생 성
폼 의 방법
  ActiveForm::begin()방법
  ActiveForm::end()방법
  getClient Options()방법
  기타 방법:errorSummary,validate,validate Multiple
폼 의 인자
  폼 form 자체 속성
  폼 의 각 항목(field)입력 상자 와 관련 된 속성
    $fieldConfig
    검증 속성
    각 field 용기 스타일 에 대한 속성
  ajax 인증
  전단 js 이벤트
  폼 의 기타 속성
먼저 Yii 에서 가장 간단 한 로그 인 폼 과 생 성 된 html 코드 와 인터페이스 를 살 펴 보고 직관 적 인 이 해 를 가 집 니 다.

<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
  <?= $form->field($model, 'username') ?>
  <?= $form->field($model, 'password')->passwordInput() ?>
  <?= $form->field($model, 'rememberMe')->checkbox() ?>
  <div style="color:#999;margin:1em 0">
   If you forgot your password you can <?= Html::a('reset it', ['site/request-password-reset']) ?>
  </div>
  <div class="form-group">
     <?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
  </div>
<?php ActiveForm::end(); ?>

다음은 생 성 된 폼 Html 입 니 다.제 가 안에 5 부분 을 표 시 했 습 니 다.
1.폼 생 성
Yii 에서 폼 인 ActiveForm 도 Widget 이 고 위 에서 begin 으로 시작 하 는 것 을 볼 수 있 습 니 다.

<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>

중간 에 각 항목 의 입력 상자 가 있 고 마지막 으로 end 에서 끝 납 니 다.

<?php ActiveForm::end(); ?>

2.양식 중의 방법
Widget 에서 begin()방법 은 int 방법 을 호출 합 니 다.

public function init()

마지막 end()방법 에서 run 방법 을 호출 합 니 다.

public function run()

1.ActiveForm::begin()방법

//       $form = ActiveForm::begin(['id' => 'login-form']);   begin        
public function init()
{
    //      form id
    if (!isset($this->options['id'])) {
      $this->options['id'] = $this->getId();
    }
    //            field      
    if (!isset($this->fieldConfig['class'])) {
      $this->fieldConfig['class'] = ActiveField::className();
    }
    //             
    // :<form id="login-form" action="/lulublog/frontend/web/index.php?r=site/login" method="post">
    echo Html::beginForm($this->action, $this->method, $this->options);
}

2.ActiveForm::end()방법

//       ActiveForm::end();   end        
public function run()
{
    //               js    ,
    if (!empty($this->attributes)) {
      $id = $this->options['id'];
      $options = Json::encode($this->getClientOptions());
      $attributes = Json::encode($this->attributes);
      $view = $this->getView();
      ActiveFormAsset::register($view);
      /*
       * $attributes:        field  。     activeform   field   , field begin        。
       *     field      ,   field     
       *   username field     
       * validate、id、name、
       * validateOnChange、validateOnType、validationDelay、
       * container、input、error
       * 
       * $options:          , :
       * errorSummary、validateOnSubmit、
       * errorCssClass、successCssClass、validatingCssClass、
       * ajaxParam、ajaxDataType
       */
      $view->registerJs("jQuery('#$id').yiiActiveForm($attributes, $options);");
    }
    //         
    echo Html::endForm();
}

3.getClient Options()방법

/*
*                 js     
*/
protected function getClientOptions()
{
    $options = [
      'errorSummary' => '.' . $this->errorSummaryCssClass,
      'validateOnSubmit' => $this->validateOnSubmit,
      'errorCssClass' => $this->errorCssClass,
      'successCssClass' => $this->successCssClass,
      'validatingCssClass' => $this->validatingCssClass,
      'ajaxParam' => $this->ajaxParam,
      'ajaxDataType' => $this->ajaxDataType,
    ];
    if ($this->validationUrl !== null) {
      $options['validationUrl'] = Url::to($this->validationUrl);
    }
    foreach (['beforeSubmit', 'beforeValidate', 'afterValidate'] as $name) {
      if (($value = $this->$name) !== null) {
        $options[$name] = $value instanceof JsExpression ? $value : new JsExpression($value);
      }
    }
    return $options;
}

다음은 생 성 된 폼 검증 Js 코드 입 니 다.

jQuery(document).ready(function () {
    jQuery('#login-form').yiiActiveForm(
    {
        "username":{
            "validate":function (attribute, value, messages) {
                yii.validation.required(value, messages, {"message":"Username cannot be blank."});
            },
            "id":"loginform-username",
            "name":"username",
            "validateOnChange":true,
            "validateOnType":false,
            "validationDelay":200,
            "container":".field-loginform-username",
            "input":"#loginform-username",
            "error":".help-block"},
        "password":{
            "validate":function (attribute, value, messages) {
                yii.validation.required(value, messages, {"message":"Password cannot be blank."});
            },
            "id":"loginform-password",
            "name":"password",
            "validateOnChange":true,
            "validateOnType":false,
            "validationDelay":200,
            "container":".field-loginform-password",
            "input":"#loginform-password",
            "error":".help-block"
            },
        "rememberMe":{
            "validate":function (attribute, value, messages) {
                yii.validation.boolean(value, messages, {
                    "trueValue":"1","falseValue":"0","message":"Remember Me must be either \"1\" or \"0\".","skipOnEmpty":1});
            },
            "id":"loginform-rememberme",
            "name":"rememberMe","validateOnChange":true,
            "validateOnType":false,
            "validationDelay":200,
            "container":".field-loginform-rememberme",
            "input":"#loginform-rememberme",
            "error":".help-block"}
    }, 
    {
        "errorSummary":".error-summary",
        "validateOnSubmit":true,
        "errorCssClass":"has-error",
        "successCssClass":"has-success",
        "validatingCssClass":"validating",
        "ajaxParam":"ajax",
        "ajaxDataType":"json"
    });
});

4,기타 방법:errorSummary,validate,validate Multiple

public function errorSummary($models, $options = [])

이것 은 주로 model 의 모든 오류 정 보 를 div 에 모 으 는 것 입 니 다.

public static function validate($model, $attributes = null)
public static function validateMultiple($models, $attributes = null)

이 두 가 지 는 잘못된 정 보 를 얻 는 방법 으로 비교적 간단 하 다.
3.폼 의 매개 변수
1.폼 form 자체 의 속성
$action:현재 폼 에서 제출 한 url 주 소 를 설정 합 니 다.비어 있 으 면 현재 url 입 니 다.
$method:제출 방법,post 또는 get,기본 값 은 post
$option:이 안에 폼 의 다른 속성 을 설정 합 니 다.예 를 들 어 id 등 이 설정 되 어 있 지 않 으 면$autoIdPrefix 를 접두사 로 자동 으로 증가 하 는 id 가 자동 으로 생 성 됩 니 다.

//     Widget   
public function getId($autoGenerate = true)
{
    if ($autoGenerate && $this->_id === null) {
      $this->_id = self::$autoIdPrefix . self::$counter++;
    }
    return $this->_id;
}

2.폼 의 각 항목(field)입력 상자 와 관련 된 속성
Yii 에서 생 성 된 모든 field 는 4 부분 으로 구성 되 어 있 습 니 다.
① 가장 바깥쪽 div 는 모든 field 의 용기 이 고,
② label 은 각 field 의 텍스트 에 대해 설명 합 니 다.
③ input 는 입력 요소 이 고,
④ 오류 알림 메시지 도 있다.

<div class="form-group field-loginform-username required has-error">
    <label class="control-label" for="loginform-username">Username</label>
    <input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">
    <div class="help-block">Username cannot be blank.</div>
</div>

$fieldConfig:이것 은 모든 field 의 통 일 된 설정 정보 설정 의 속성 입 니 다.필드 클래스 의 속성 을 모두 이곳 에서 설정 할 수 있다 는 것 이다.

public function field($model, $attribute, $options = [])
{
    //  fieldConfig options     field
    //$options      fieldConfig   ,     field    
    return Yii::createObject(array_merge($this->fieldConfig, $options, [
      'model' => $model,
      'attribute' => $attribute,
      'form' => $this,
]));
}

검 증 된 속성:
①$enableClient Validation:클 라 이언 트 에서 인증 할 지,즉 전단 js 인증 스 크 립 트 를 생 성 할 지 여부(form 에 ajax 인증 을 설정 하면 이 js 스 크 립 트 를 생 성 합 니 다).
②$enableAjaxValidation:ajax 인증 여부
③$vaidateOnChange:입력 상자 에 초점 을 잃 고 값 이 바 뀔 때 검증
④$vaidateOnType:입력 할 때 검증
⑤$vaidationDelay:검증 지연 시간,단 위 는 밀리초 입 니 다.
이 5 개의 속성 은 각각 field 를 만 들 때 단독으로 설정 할 수 있 습 니 다.field 클래스 에 이 5 개의 속성 이 있 기 때 문 입 니 다.
각 field 용기 스타일 의 속성:
$requiredCssClass:필수 항목 의 스타일 입 니 다.기본 값 은'required'입 니 다.
$errorCssClass:잘못된 스타일 을 검증 합 니 다.기본 값 은'has-error'입 니 다.
$successCssClass:올 바른 스타일 을 검증 합 니 다.기본 값 은'has-success'입 니 다.
$vaidating CssClass:검증 과정 에서 의 스타일 입 니 다.기본 값 은'vaidating'입 니 다.
3.ajax 검증
$vaidationUrl:ajax 가 검증 한 url 곳
$ajax Param:url 의 get 매개 변 수 는 현재 ajax 요청 임 을 표시 합 니 다.기본 값 은'ajax'입 니 다.
$ajax DataType:ajax 가 되 돌려 달라 고 요청 한 데이터 형식
4.전단 js 이벤트 속성
$beforeSubmit:폼 을 제출 하기 전에 이벤트 가 false 로 돌아 가면 폼 을 제출 하지 않 습 니 다.형식 은:

function ($form) {
 ...return false to cancel submission...
}

$beforeValidate:모든 속성 이 검증 되 기 전에 실 행 됩 니 다.형식 은:

function ($form, attribute, messages) {
 ...return false to cancel the validation...
}

$after Validate:모든 속성 이 검 증 된 후에 실 행 됩 니 다.형식 은:

function ($form, attribute, messages) {
}

5.폼 의 기타 속성
$vaidateOnSubmit:양식 을 제출 할 때 검증 합 니 다.
$error Summary:전체 오류 알림 의 스타일
$attributes:이 속성 은 필드 를 만 들 때 필드 에서 이 form 의$attributes 에 값 을 부여 합 니 다.이렇게 하면 field 방법 을 통 해 생 성 된 입력 폼 을 모두 검증 할 수 있 도록 확보 할 수 있다.
Yii 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 는 Yii 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기