Entity로 변경하는 이유는, 앞으로 column수가 증가하거나 수정이 있을 때, 해당 data를 사용하는 곳에서 최대한 변경을 줄일 수 있기 때문입니다.
예를 들어서 form을 파일로 만들어 관리하는 경우
<div class="form-group">
<label for="description">description</label>
<input type="text" value="<?= old('description', esc($data['description'])) ?>" name="description" id="description" class="form-control" placeholder="hi">
<button>submit</button>
</div>
위의 코드에서는 form의 column이 desription뿐인 경우인데, Task를 새로 작성하는 부분과 수정하는 부분에서 위의 동일한 form이 사용됩니다.
하지만, 수정하는 경우에는 DB로부터 해당 task의 data를 받아와 "$data['description']" 값을 text input의 value로 넣어주지만, 새로 작성하는 경우에는 task의 데이터가 존재하지 않기 때문에 "$data['description']"이 존재하지 않기 때문에 error가 발생합니다.
return view('Task/new', [
'data' => ['desciprtion' => ''],
]);
이것을 해결하기 위해서는, 위의 코드처럼 controller에서 빈 description의 연관배열을 보내줘야합니다.
하지만, 만약에 column의 개수가 많거나 수정이 일어나는 경우에는 위의 같은 작업이 번거롭게 느껴질 것 입니다.
Entitiy를 사용하여 object로써 데이터를 관리하면 위와 같은 상황을 쉽게 해결 할 수 있습니다 .
Entitiy 생성
php spark make:entity Task
app\Entities\Task.php
<?php
namespace App\Entities;
use CodeIgniter\Entity\Entity;
class Task extends Entity
{
}
entitiy에 따로 속성들을 정의하지 않아도, codeigniter 에서 자동적으로 속성을 정의해줍니다.
app\Models\TaskModel.php
protected $returnType = 'App\Entities\Task';
Task model에는 return type을 방금 생성한 entity로 변경해줍니다.
기본 default는 array입니다.
$data = new \App\Entities\Task;
return view('Task/new', [
'data' => $data,
]);
그리고 아까 controller에서 빈 연관배열 형태로 보냈던 부분을 task object를 하나 생성해서 보내주면 해결이 됩니다.
이렇게 작성을하면, 나중에 task table에 변화가 생겨도 이부분은 수정을 하지 않아도 됩니다.
'IT 공부 > CodeIgniter' 카테고리의 다른 글
[ codeigniter 4 ] 사용자 정의 Helper와 Library (0) | 2022.03.11 |
---|---|
[ codeigniter 4 ] 404 Exception handling (0) | 2022.03.10 |
[ codeigniter 4 ] Model을 이용해서, DB의 데이터 접근 & 디버그 (0) | 2022.03.08 |
[ Codeigniter 4 ] Command / Controller를 이용해서 Migrate 실행하기 (0) | 2022.03.07 |
[ Codeigniter ] Codeigniter 4 프로젝트 virtualhost 서버 설정 (0) | 2022.02.28 |