- 순수 PHP
- MVC
- 빠른실행
- 쉬운 업데이트
-
서버도구 설치
Git, Docker, Composer, NPM, NPX 설치 ($ npm i -g npx)
-
Git 클론(최초 1회)
$ git clone https://github.com/wooygcom/mapc.me.git
-
필요한 패키지 설치
$ cd MAPC_ME_ROOT/web $ composer update (또는 php composer.phar update) $ npm install $ npm run build
-
서버 실행(도커활용)
$ sudo docker-compose up -d
- 추가로 설치할 경우(필요할 때만)
npm install PACKAGE --save
-
개발할 때의 접속주소 http://접속주소/mapc.me/web/mapc-public/
-
실 서버에서는 "mapc-public'이 웹루트가 되도록 설정할 것!!!(보안)
-
SERVER_URL/my/diary/edit 라는 페이지를 만드려면
- mapc-app/ 디렉토리의 "bare" 디렉토리를 "my"라는 디렉토리로 복사하고
- "my/controllers 와 views 각 디렉토리 안의 index.php를 edit.php로 복사하면
- 설치된URL/my/diary/edit 로 접속 할 수 있다.
-
// #TODO 위 내용의 설명서 만들어야 됨
-
//URL/[VENDOR]/[MODULE]/[ACTION] 로 접속 할 경우 벌어지는 일~ (아래는 //URL/Common/posts/123/edit 으로 접속 할 경우를 예로 들었음)
-
/mapc-public/index.php
-
상수값 설정, 환경설정을 불러옴
- env에서 기본환경설정(디렉토리, URL설정) 불러옴 어느 디렉토리에서 환경설정불러올지 설정할 수 있음 기본은 config 이고 이걸 config.site 이런식으로 바꿀 수 있음 여러가지 환경설정을 만들어두고 필요에 따라 바꿀 수 있음
- config(사이트별 특화된 환경설정), routes(Routes설정) 불러옴 Common/config/routes.php 에서 Common/posts/123/edit([VENDOR]/[MODULE]/[ID]/[ACTION]) 순으로 Argument를 받게끔 설정됨
-
입력값(벤더, 모듈, 액션 등)에 따라서 필요한 파일 불러오기(다음장으로) /mapc-app/Common/index.php
-
-
/mapc-app/Common/index.php
- Controllers/PostsController.php 불러옴
- Views/PostsView.php 불러옴
-
각각의 PostsController.php, PostsView.php
- PostsController(또는 View) 안에서 switch case 문을 사용해서 각 action을 프로그램해도 되고...
- posts/edit.php 불러오게 해도 됨
- 아래처럼
- Controller에서 전부 처리하게해도 되고 PostsController.php switch($ROUTES['action']) { case 'edit': }
- 각각의 Action별로 나누고 불러오는 방식으로 해도 되고... include('posts/edit.php');
-
실제 프로그램 영역 Controller/posts/edit.php 에서 선처리!!!!! (array $v에 출력할 내용을 저장) View/posts/edit.php 에서 화면출력!!!!! 전체에 같은 설정을 적용하려면 PostsView.php 에서 header 등 필요한 내용을 설정 각각의 페이지에서 화면출력을 따로 설정하려면 posts/edit.php 에서 header나 footer등을 불러오게 하면 됨.
-
일반적인 형태(vendor/Common/index.php)와 별다른 차이가 없으면 아래 내용 그대로 사용
<?php { // BLOCK:get_common:20150825:Common/index.php 그대로 가져오기 $rootDir = __DIR__; @include($rootDir . DS . '..' . DS . 'Common' . DS . 'index.php'); } // BLOCK // this is it
-
vendor/index.php를 처음 만들 때는 [1/2] 또는 [2/2]를 복사 붙여넣기 하면 됨
-
vendor/Common/index.php(일반적인형태)와 다른 형태로 만들고 싶을때 사용
<?php { // BLOCK:proc:20191204:선처리 $rootDir = $rootDir ? $rootDir : __DIR__; } // BLOCK { // BLOCK:get_controller:20150825:컨트롤러 불러오기 /** * * Get Controller... * */ $v = []; @include($rootDir . '/controllers/' . $ROUTES['module'] . 'Controller.php'); } // BLOCK { // BLOCK:publish:20150825:출력처리 /** * * Get VIEW file and publish * */ // 보안을 위해 CONFIG에서 필요한 값을 제외한 모든 환경설정값 지우기 $v['url'] = $CONFIG['url']; $v['menu'] = $CONFIG['menu']; $v['site'] = $CONFIG['site']; unset($CONFIG); @include($rootDir . '/views/' . $ROUTES['module'] . 'View.php'); } // BLOCK // this is it
- config/routes.php의 설정에 따라 controllers/packageController.php에서 controllers/package/module.php 호출
- package전체에서 사용하는 선처리, 후처리 할 것이 있으면 packageController.php에서 module안에서만 필요한건 module.php에서 처리
<?php
if(!defined("__MAPC__")) { exit(); }
include($ROUTES['callback'] . '.php');
// this is it
<?php
if(!defined("__MAPC__")) { exit(); }
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// POST값이 들어오면 "실행"
switch($_POST['_method']) {
case 'post':
case 'put':
case 'patch':
case 'delete':
default:
//
break;
}
}
// this is it
include(PROC_PATH . 'proc.autoload.php'); // Mapc 내부 패키지 불러오기 위해서
$db = include(PROC_PATH . 'proc.db.php'); $user = new Users(['db' => $db, 'table' => $table]);
use Mapc\Common\Users;
include(PROC_PATH . 'proc.exec.php');
<?php
namespace Mapc\Common;
use Mapc\Common\Crud;
/**
* Bare Model
* @version 0.1
*/
class Bare {
public $id;
public $vars;
} // class
// this is it
- 기본
include($ROUTES['callback'] . '.php');
- 단순 : moduleView.php에서 모두처리, 스크립트 처리가 필요없는 프로그램에서만 사용, 1번 기본형 추천
<?php
/**
*
* View
*
* @version 0.1
*
*/
$layout = $config['site']['layout'];
include(LAYOUT_PATH . $layout . DS . 'head.php');
include(LAYOUT_PATH . $layout . DS . 'header.php');
?>
내용
<?php
include(LAYOUT_PATH . $layout . DS . 'footer.php');
include(LAYOUT_PATH . $layout . DS . 'foot.php');
// this is it
$v['head']['extension'] = <<< EOT
<!-- include libraries(jQuery, bootstrap) -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
EOT;
$v['header']['extension'] = sprintf($v['header']['extension'], ROOT_URL);
아래처럼 $v['url']['layout']를 붙일 것...
<script src="<?= $v['url']['layout']; ?>path/src.js">