[CodeIgniter 4 pre-alpha 사용기] CodeIgniter 4 의 17년 12월 01일 기점 변경점. 제작이야기 | Posted on 2017. 12. 2. 16:38
1. PC버전에서 디버그바가 다시 생겼습니다.
아니 정확히는 PC 버전에서도 디버거가 열심히 일을 하고 있기는 했는데..
PC버전에서는 안보이고, 모바일에서는 보이는 신기한 현상이 있었죠..
(개발용은 파이어폭스 쓰는..)
그런데 17년 12월 01일까지의 깃허브 커밋된 파일로 교체하고 나니 다시 나오기 시작했습니다.
2. 파일캐시가 정상적으로 작동하지 않습니다.
전번에 쓴다는거 깜박해서..
이번글에 작성..
아마 17년 11월 18일경의 깃허브에 있던 파일 기준도 안됬었는데..
/application/Config/Cache.php #39의 라인을 주석걸어 주셔야 파일 캐시가 작동합니다.
/* |-------------------------------------------------------------------------- | Cache Directory Path |-------------------------------------------------------------------------- | | The path to where cache files should be stored, if using a file-based | system. | */ // public $path = WRITEPATH.'cache/';
주석을 걸지 않으면 서버쪽의 설정을 가져오는거 같네요.
(근데 파일을 생성하지 못함..)
그래서 저쪽을 주석걸어주면, 파일 캐시의 기본 설정(저것과 동일합니다.)을 가져와서 사용합니다.
3. getValidationRules 함수가 추가되었습니다.
사실 이 함수가 추가됬다는것을 알게된것도..
같은 이름 + 같은 기능을 하는 함수를 필자가 만들어서 쓰고 있었어서;;
(같은 이름의 함수가 있습니다. 라는 에러가 갑자기 뜨길래 뭐지??? 한..;;)
/system/Model.php #1156 ~ #1176
/** * Returns the model's defined validation rules so that they * can be used elsewhere, if needed. * * @return array */ public function getValidationRules(array $options=[]) { $rules = $this->validationRules; if (isset($options['except'])) { $rules = array_diff_key($rules, array_flip($options['except'])); } elseif (isset($options['only'])) { $rules = array_intersect_key($rules, array_flip($options['only'])); } return $rules; }
각 DB 테이블별 클래스에 $this->validationRules 로 룰을 지정할 수 있었는데..
기존에는 각기 필요한 사항들을 페이지 단위로 그룹핑 해야만 했습니다.
(회원가입, 로그인, 회원정보수정.. 3개 페이지만해도 로그인에 필요한 아이디 룰셋이 3번 들어가야.. 하나 수정되면 그걸 다 찾아내서 수정해야하는 불편함이..)
근데, 해당 함수의 추가로 사용하는 모든 필드에 대한 룰셋을 추가해두고, 필요한것만 불러 올 수 있게 됬습니다.
그러니, $class->getValidationRules(['only'=>['field1', 'field2']]); 이렇게 field1과 field2의 룰셋을 가져올 수 있는..
/** * getValidationRules * * @param array $fields * * @return array $rules */ public function getValidationRules (array $fields) : array { $rules = []; foreach ($fields as $value) { if (isset($this->fieldRules[$value])) { $rules[$value] = $this->fieldRules[$value]; } } return $rules; }
필자가 기존에 사용하던것도 비슷한데..
$class->getValidationRules(['field1', 'field2']); 로 field1과 field2의 룰셋을 가져오고 있었..
코어쪽에서 해당 기능을 지원해주니, 기존에 만들었던 함수 전부 대체 시켜야 겠네요.
(코어꺼 쓰는게 좋지..)
+ PhpStorm의 업데이트로 try catch 경고를 띄워주도록 패치가 되었습니다.
그래서, 기존에는 아래와 같이 코드를 작성해도 문제 없었으나..
$data = $this->doProtectFields($data);
이번 패치로 인해서 저렇게 코딩하면 경고가 표시됩니다.
/system/Model.php #1001에 보시면 doProtectFields(); 함수안에 아래와 같은 코드가 있습니다.
throw new DatabaseException('No Allowed fields specified for model: ' . get_class($this));
저 오류가 발생할때 처리를 해줘야 하기 때문에, 기존의 코드는 경고를 보여주게 됩니다.
그래서 경고가 저처럼(..) 신경쓰이는 분들은 아래와 같이 코딩을 해주시면 됩니다.
try { $data = $this->doProtectFields($data); } catch (DatabaseException $e) { echo 'Caught exception: '.$e->getMessage(); }