내가 한 노력들

[ codeigniter 4 ] Model의 return 타팁을 Entity로 변경하기 본문

IT 공부/CodeIgniter

[ codeigniter 4 ] Model의 return 타팁을 Entity로 변경하기

JONGI-N CHOI 2022. 3. 9. 15:37

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에 변화가 생겨도 이부분은 수정을 하지 않아도 됩니다.