2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

Cakephp3 소스코드 컴포넌트화

예전부터 많이 들었던 소리가 바로 소스코드를 잘 정리해서 공통된 부분은 컴포넌트화 혹은 모듈화 혹은 라이브러리화 하라는 것이었다.아무생각 없이 막 코드 써내려가다 보면 반드시 중복되는 부분이 나오는데 이걸 하나로 관리하지 않으면 향후 엄청난 노가다를 하게 된다..간단한 예로 오타 하나 수정해야 할 때 소스코드가 있는 모든 페이지를 하나하나 열어서 수정한 후 저장하는 것..꽤나 귀찮다..그 외에도 쓸데없이 코드가 길어지므로 보기도 좋지 않고 같은 내용을 계속 불러서 실행하니 퍼포먼스도 떨어지고..좋은 것 하나 없다.
Cakephp는 MVC 패턴이 적용되어 있어서 컨트롤러, 모델, 뷰 각각 컴포넌트화 하는 방법이 다르다.컨트롤러는 컴포넌트라는 모듈을 이용한다. /src/Controller/Conponent/ 폴더에 파일을 만들고 (파일명Component.php) 공통 코드를 작성한 후, 사용하고자 하는 컨트롤러에서 만들어 놓은 컴포넌트를 로드해서 사용하는 식이다.
//Controllers\Component\CommonComponent.php namespace App\Controller\Component; use Cake\Controller\Component; class CommonComponent extends Component { public function getCurYearData() { // 여기에 코드를 작성한다. } }
// Controllers\SampleController.php class SampleController extends AppController { public function initialize() { parent::initialize(); $this->loadComponent('Common'); // 컴포넌트를 로드함 } public function index() { $curData = $this->Common->getCurYearData(); // 사용할 때는 요런 느낌 ... }
모델의 경우에는 비헤이버(Behavior) 라는 모듈을 만들어서 그것을 상속하는 식으로 사용한다./src/Model/Behavior/ 에 파일명Behavior.php 를 만든 후, 필요한 모듈페이지에서 addBehavior로 호출해서 사용한다.
namespace App\Model\Behavior; use Cake\ORM\Behavior; class TestBehavior extends Behavior { public function initialize(array $config) { // 何らかの初期化処理 } }
namespace App\Model\Table; use Cake\ORM\Table; class TestTable extends Table { public function initialize(array $config) { $this->addBehavior('Test'); } }
마지막으로 뷰는 엘레멘트라고 하는 모듈을 만들어서 사용한다./src/Template/element/ 폴더 안에 파일명.ctp를 만들고 필요한 페이지에서 엘레멘트를 로딩하는 식이다. 이전 포스트에서도 작성한 적이 있음..ㅋㅋ 우선 login.ctp 를 아래와 같이 만들어서 폴더에 넣고..
<div class="row" style="text-align:right"> 안녕하세요、<strong> <?=$this->request->session()->read('Auth.User.account_name')?> </strong> (<?=$this->request->session()->read('Auth.User.account')?>) 님! <?= $this->Html->link( '로그아웃', ['controller' => 'Users', 'action' => 'logout'], ['class' => 'btn btn-danger btn-xs', 'role' => 'button'] ); ?> </div>
ctp파일에서 필요한 곳에 아래와 같이 사용하면 된다.
<?= $this->element('login'); ?>
참고한 블로그 링크는 아래와 같음..(물론 공식 메뉴얼도 참고했으나 ㅋ)
https://qiita.com/shizuma/items/5de7dc9d98af0300df18

댓글

이 블로그의 인기 게시물

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

[C# & LINQ] 랜덤으로 데이터를 한 개 추출하는 방법

[react-native] uuid 생성이 에러가 날 때 대처법