CI 묻고 답하기

제목 validation 속도
카테고리 CI 4 관련
글쓴이 nataek 작성시각 2024/03/03 14:09:01
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 2192   RSS

안녕 하세요.

CI4 정식 문서를 보면서 공부를 하고 있습니다.

검증(validation) 부분을 보고 있는데요.

이상하게 검증 부분을 추가 하면 뷰의 로딩속도가 매우 떨어지고 timeout 에러가 발생하여

조언을 얻고자 합니다.

데이터베이스를 연결 하는 것도 아니고 컨트롤러와 뷰만 사용하여 테스트 중인데..로딩속도가 엄청 느립니다.

소스가 복잡한 것도 아닙니다. 다만 도커를 사용 하고 있고 nginx 를 웹서버로 사용 하고 있습니다.

소스는 아래와 같습니다.

컨트롤러는 

<?php

namespace App\Controllers;

use App\Models\UserModel;
use Config\Services;

class User extends BaseController
{
    protected $UserModel;
    protected $helpers = ['form'];

    protected $validation;

    public function __construct()
    {
        $this->validation = Services::validation();
    }

    public function insertUser3()
    {

        if (strtolower($this->request->getMethod()) !== 'post') {
            return view('user/insert_user', [
                'validation' => $this->validation
            ]);
        }

        if (! $this->validate('user')) {
            // 유효성 검사 실패 시 에러 메시지와 함께 사용자에게 양식을 다시 표시
            return view('user/insert_user', [
                'validation' => $this->validation
            ]);
        }

        return view('user/success');
    }
}
?>

이고

view 는 

<?=$validation->listErrors() ?>
    <?php
    $attributes = ['class' => 'frm', 'id' => 'myform', 'name' => 'myform'];
    echo form_open("/user/input3", $attributes);
    ?>

        <?= csrf_field() ?>
        <label for="title">이메일</label>
        <input type="input" value="<?=set_value('email')?>" name="email" /><br />
        <BR>
        <label for="body">이름</label>
        <input type="input" name="username" value="<?=set_value('username')?>"  /><br />
        <input type="hidden" name="active" value="2" /><br />
        <BR>

        <input type="submit"  value="입 력" />
    <?=form_close()?>

입니다.

위의 소스로  localhost/user/input3 (라우터주소) 를 브라우저에서 호출 시 속도가 매우 느리거나아예 timeout 에러가 발생 합니다.

그런데 컨트롤러의 ['validation' => $this->validation] 부분을 빼면 정상 속도가 나옵니다.(['validation' => $this->validation] 를

뺐을때에는 오류 발생 방지를 위해 뷰의 $validation->listErrors() 를 삭제 하였습니다.)

그러면 ['validation' => $this->validation] 이 부분이 문제라는 것인데 원인을 모르겠습니다.

혹시 조언을 주실 수 있을까요?

감사 합니다.

 

 

 다음글 컨트롤러에서 restful api 요청 질문입니다. (3)
 이전글 CI4 css js 경로문제 (3)

댓글

kaido / 2024/03/04 14:17:29 / 추천 0

저도 docker 에 nginx 에 validation 사용중입니다만 느려지는 부분은 하나도 없습니다.

해당 기능은 오직 필터로서의 기능이니깐요.

만일 해당 현상을 가정한다면 라우터의 설정이 다른 부분과 충돌이 나서 서로 리다이렉트 한참 던지다가 

브라우저가 정상적으로 나온 형태를 찾아간게 아닐까? 정도 입니다.

우선 라우터를 다 빼고 테스트 하면서 하나씩 찾아보셔야 할것 같습니다.

nataek / 2024/03/07 09:46:40 / 추천 0

답변 감사 합니다.

이런 저런 테스트도 다시 해보고, 값도 찍어 보고, chatgpt 에도 물어보고 해보니

$this->validation = Services::validation();
<?=$validation->listErrors() ?>

이 두 부분이 문제 였습니다..

$this->validation 찍어보니 넘어 오는 값들이 엄청 많더군요..

ci4 의 설정 값 같은 것들이 엄청 많이 넘어오고.. view 화면에서는 에러값만 찍으면 되는데..

그리고 $validation->listErrors() 이 구문도 틀렸나 봅니다. service 를 이용해서 찍으니까..나오던데요..

공식문서 예시대로 하면 아마 대부분 저랑 같은 현상을 겪을 것 같습니다.

워낙 제가 초보 이기 때문에 대부분 저랑 같은 순서대로 시행착오를 겪을 테니까요..

 

공식문서를 한글화 하신 분들이 매우 감사 합니다만..위의 예시 처럼 안맞는 경우가 많은 것 같습니다.

혼돈 스럽습니다.

 

 

 

 

변종원(웅파) / 2024/03/07 11:49:18 / 추천 0

ci4에서는 컨트롤러에 construct 를 사용하지 않습니다. 매뉴얼이나 샘플소스 자세히 보세요.

initController 가 그 역할을 대신 합니다. 이 곳에서 

$this->validation = \Config\Services::validation();