질문 Q #23164
ci4에서 공통 레이아웃은 어떻게 만들어야 할까요?
보라색맛났어 2021-04-02 16:43:09

ci3에서는 

application>core 경로에 MY_Loader 파일 만들어서 정의한다음

컨트롤러에서

$this->load->tile('base','main.php',$data); 와 같은 형식으로 불러왔습니다

<?php

//예시

class MY_Loader extends CI_Loader {

	protected $_tilesets = array();					// 타일을 정의함.
	protected $_ci_interface_paths    = array();	// 인터페이스를 정의함
	protected $_ci_abstract_paths    = array();		// 추상클래스를 정의함

	function __construct() {
		parent::__construct();
		$this->_tilesets = array(
			'base' => array(
				'base' => 'tiles/base/base',
				'header' => 'tiles/base/header',
				'footer' => 'tiles/base/footer',
			),
			'adm' => array(
				'base' => 'tiles/adm/base',
				'header' => 'tiles/adm/header',
				'footer' => 'tiles/adm/footer',
			)
		);
		
		 $this->_ci_interface_paths = array(APPPATH, BASEPATH);
		 $this->_ci_abstract_paths = array(APPPATH, BASEPATH);
	}


    function tile($tileset = 'base', $view, $vars = array(), $return_flag = false) {
        
        $vars['header'] = $this->view($this->_tilesets[$tileset]['header'], $vars, true);

        $data['content'] = $this->view($view, $vars, true);

        return $this->view($this->_tilesets[$tileset]['base'], $data, $return_flag);
        
    }

그런데 ci4에서는 core란 경로 자체가 없어지고 내용도 전혀 달라서 어떻게 해야할지 감이 안 잡히는데

어디에 정의해서 위의 문법처럼 로드할 수 있을까요?

 

public function index()

{

echo view('header');

echo view('main');

echo view('bottom');

}

이런식으로 불러올 수 있겠지만 매번 공통부분을 써주는 건 비효율적인거 같아서요 ㅠㅠ 

답변 3
#1 테러보이 2021-04-02 17:22:09
저같은 경우는 그게 귀찮아서 라이브러리로 만들어 사용중입니다 ㅎㅎ
#2 PureAni 2021-04-02 17:24:41
service 에 등록하세요.
#3 보라색맛났어 2021-04-02 17:32:57

controller>BaseController에

public function tiles(string $page, array $data)
	{
		echo view('header');
		echo view($page, $data);
		echo view('bottom');
	}

같이 작성하니까 정상 작동되긴 하는데 config>services 쪽에 정의 하는게 좋을까요?