Spac Download2010. 8. 11. 18:19
- MySQL Dao 바인딩쿼리관련 메소드가 추가되고 내장 템플릿사용시 발생될 수 있는 몇가지 오류가 수정됐습니다.

자세한 내용은 http://www.phpwork.kr 에서 확인하실 수 있으며, 아래의 링크에서 다운로드 받으실 수 있습니다.

Posted by webdata

::: SPAC (Simple Php Action Class) PHP Framework:::



Spac 은 PHP를 이용해 웹어플리케이션을 개발시 구조적이고 체계적인 개발을 할 수 있도록 도와주는 PHP를 위한 개발 프레임웍입니다.

최근 PHP 프레임웍이 외국으로부터 많이 알려지면서 프레임웍을 이용하여 개발하는 사례가 많아지며, 프레임웍에 대해 관심을 갖는 PHP 개발자들 또한 많아지고 있는 추세인것 같습니다.

이런 분위기를 타고 저 또한 개인적으로 사용하고 있는 PHP 개발 프레임웍 Spac을 소개하고자 합니다.

Spac은 작고, 가볍고,  빠른 PHP 웹어플리케이션 개발을 위한 프레임웍입니다.


Spac 이라는 PHP프레임웍에 대해 특징을 위주로 하나하나 소개하겠습니다.


1. 개인/기업/영리/비영리기관 관계없이 무료로 웹사이트 개발에 이용하실 수 있습니다. (수정배포 불가)


2. 클래스기반의 작고, 가볍고, 빠른  PHP 웹어플리케이션 개발 프레임웍입니다.


3. URL을 분석하여 액션클래스를 매핑, 실행합니다.


4. M.V.C 패턴을 기본으로 지원합니다.


5. 웹어플리케이션을 위한 디렉토리 구성이 자유롭습니다.


6. 호출되는 URL과 이에 매핑되는 액션클래스를 사용자가 임의로 설정할 수 있습니다. (액션클래스매핑)


7. 간편한 HTML 레이아웃 구성 도구가 제공됩니다.


8. 뷰에서 PHP코드의 활용이 자유롭습니다.


9. 뷰에 전용템플릿태그를 기본적으로 지원하며, 사용자가 직접 태그규칙을 작성하여 실행할 수도 있습니다.


10. 뷰파일은 캐시되어 좀 더 빠른 엑세스를 가능하게 합니다.


11. URL 암호화 기능을 지원하며, 이 암호화 처리는 사용자 암호화클래스를 로드하여 구성할 수도 있습니다. 


12. 개발에 중요한 사항은 기본적인 플러그인으로 제공됩니다. ( Dao,  Paging 등)


13. 기타 다양한 확장을 위해 외부컨트롤러로드 도구를 제공합니다.


14. 지속적인 업데이트가 진행되며 업데이트 반영시 이미 개발된 사용자 어플리케이션에 영향을 거의 주지 않습니다.






1. Spac(Simple Php Action Class)은 클래스기반 개발 프레임웍입니다.

아래는 간단한 "Hello World" 를 출력하는 간단한  예제입니다.


(1) "HelloWorld"  클래스 작성 

model/HelloWorld.Class.php
<?php
class HelloWorld extends Controller {
    function HelloWorld () {
       $this->message = "Hello World!";
    }
    function execute() {
       $this->result_uri = 'helloworld.html';
       $this->dispatcher();
    }
}
?>

view/helloworld.html
<html>
<head></head>
<body>
{=message}
</body>
</html>


(2) 브라우저 호출 / 출력





2. URL을 이용하여 직접 클래스/메소드를 호출하는 방식을 사용합니다.

Spac에선 URL에 실제 웹서버의 디렉토리 및 파일구조를 명시하는 방식이 아닌 가상의 URL을 사용합니다.
이 가상의 URL은 Spac 내부에 구성된 사용자 클래스를 기반으로 구성됩니다.

위의 예제와 같이 URL에 클래스명 및 메소드명을 직접 명시하여 호출하면 Spac 컨트롤러가 해당 클래스의 메소드를 실행시켜 줍니다.

아래는 Spac 을 이용하여 개발시 일반적인 URL 호출 유형입니다.

 





3. Model, View, Controller 의 구조를 기본으로 하는 개발 프레임웍입니다.

다른 일반적인 프레임웍과 마찬가지로 Spac 프레임웍이 비즈니스로직과 프리젠테이션 영역을 분리하여 개발할 수 있도록 도와줍니다.

Model 에서 수행된 비즈니스로직 수행 결과를 View에 전달하여 사용자에게 출력(프리젠테이션) 하는 구조를 가지고 있으며, 이때 Model 과 View를 연결해주는 연결자 역할을 Spac 프레임웍의 Controller 가 담당하고 있습니다.



다음 그림은 Spac 프레임웍의 일반적인 프로세스 구성도 입니다. 



 


 

4. 웹어플리케이션들이 위치하는 웹디렉토리 구성이 자유롭습니다.

Spac 프레임웍을 이용하여 개발하면 웹디렉토리 및 파일구성이 자유롭습니다.

Spac 의 핵심코어 및 개발자가 작성한 중요한 어플리케이션들은 웹에서 직접 접근 불가능한 위치에 둘 수 있으며, 이를 권장합니다.

웹에서 접근 가능한 디렉토리 (일반적으로 "public_html" 혹은 "www" 등..) 에는 "index.php" 파일과 이미지 및 자바스크립트, 스타일시트 파일등만 위치하고, 중요한 웹어플리케이션 파일들은 웹디렉토리 외 다른 디렉토리에 구성할 수 있습니다.


아래는 기본적인 Spac의 디렉토리 구성입니다. (그림에서 public_html 은 웹에서 접근 가능한 웹디렉토리를 의미합니다.)



(위의 디렉토리 구성은 예제이며 사용자의 환경에 맞추어 자유롭게 구성할 수 있습니다.)






5. 클래스매핑을 이용하여 URL 에 직접 명시되는 클래스명이 노출됨으로서 발생할 수 있는 미연의 사고를 방지할 수 있습니다.

Spac에서는 URL 에 비즈니스로직을 명시 호출하여 해당 클래스가 실행되도록 하고 있는데 이때 노출될 수 있는 클래스명을 클래스매핑을 이용하여 전혀 다른 클래스가 실행 되도록 설정할 수 있습니다.

이는 URL로 "AClass" 가 호출되면 실제 "AClass" 가 아닌 "BClass"가 실행되도록 설정 할 수 있음을 의미합니다.



 

6. Spac 프레임웍에는 간편하게 페이지 레이아웃을 구성할 수 있는 도구가 제공됩니다.

기존 PHP 개발시 여러개의 조각 파일을 하나의 레이아웃 파일에 인클루드로 삽입하여 사용하던 방식을 Spac Layout 기능을 이용하면 더욱 더 간편하게 작성하실 수 있고, 유지보수 또한 간편하게 하실 수 있습니다.




▼▼▼





7. HTML을 이용하여 뷰 화면을 구성 / 출력 할 수 있으며, 자유롭게 PHP코드를 사용할 수 있습니다.

사용자가 작성한 클래스에서 도출된 결과값을 특정한 View 파일을 이용하여 출력할 수 있습니다.
이 View 파일은 HTML 코드로 작성할 수 있으며, 이 파일내에서 PHP 코드의 사용 또한 자유롭습니다.





8. 위 View 파일내에 PHP코드를 섞어 쓰는대신 템플릿전용 태그를 사용하여 좀 더 간결한 View를 작성하실 수 있습니다.

View 파일은 기본적으로 HTML코드 및 PHP코드를 사용하여 작성하지만, 여러가지 이유로 PHP코드 섞어 사용하기 불편한 경우 이를 대신하여 전용 템플릿태그를 사용할 수 있습니다.






9. View 파일은 Cache 파일로 저장하여 좀 더 빠른 엑세스를 가능하게 합니다.


레이아웃 및 템플릿 전용 태그를 사용하는 경우 서버에 부담을 줄여주고 속도를 높이기 위해 해당 결과물을 캐시파일로 저장하여 다음번 호출시 해당 로직을 수행하지 않고 즉각 캐시파일을 실행합니다.

원본파일이 수정될 경우 캐시파일이 자동 업데이트 ON/OFF 기능 또한 내장되어 있습니다. 






10. 외부 플러그인 컨트롤러의 자유로운 사용

Spac 프레임웍에서 개발에 필요한 모든 기능을 제공하지 않는 대신, 유용한 외부 클래스를 플러그인으로 로드하여 사용할 수 있는 환경을 제공합니다.

개발의 주가 되는 비즈니스로직과 직접적인 관련인 없는 범용 클래스들을 Spac에서는 외부컨트롤러로 인식하여 로딩하여 사용할 수 있도록 해줍니다.

 

이상 Spac의 일반적인 소개를 마칩니다.




Posted by webdata

::: SPAC (Simple Php Action Class) PHP Framework:::


요기로 가서 보세요 : http://spac.tistory.com/65

Posted by webdata
기본예제/회원관리2009. 12. 4. 23:47
이제 리스트 화면에서 특정회원을 삭제해 보도록 하겠습니다.

특정 회원을 삭제하기 위해선 해당 회원의 키값을 전달해야 하는데 회원가입예제에서 POST 처리를 했으므로 이번에는 GET방식으로 회원 키값을 받아 처리하는 예제를 해보겠습니다.

먼저 list.html 에 각 회원목록에 버튼을 만들어 회원의 정보를 삭제할 수있도록 GET방식으로 삭제 메소드에 변수를 전달하는 코드를 만듭니다.

기존 list.html 을 아래의 내용으로 수정합니다.

* Spac/view/list.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>회원리스트</title>

<script>
function deleteUser(user_id) {
    document.location.href="/User/deleteUser/"+user_id;
}
</script>

</head>
<body>

회원수는 <?=count($this->data_list)?> 명 입니다.
<br/><br/>

<table border="1">

    <tr bgcolor="#f2f2f2">
        <td width="100">아이디</td>
        <td width="120">이름</td>
        <td width="150">등록일</td>
        <td width="60">처리</td>       
    </tr>
 
<?php
foreach($this->data_list as $Rows) {
?>

    <tr>
        <td width="100"><?=$Rows['user_id']?></td>
        <td width="120"><?=$Rows['user_name']?></td>
        <td width="150"><?=$Rows['reg_date']?></td>
        <td width="60"><a href="#" onClick="deleteUser('<?=$Rows['user_id']?>')">삭제</a></td>              
    </tr>

<?php
}
?>

</table>

<!-- 회원가입버튼을 만들어주고 클릭하면 이전에 만든 가입폼으로 이동시킵니다. -->
<input type="button" value="회원가입" onClick="document.location.href='/User/viewUserRegForm'"></input>

</body>
</html>

회원 삭제처리 메소드는 User 클래스내에 "deleteUser" 로 하겠습니다.
따라서 위의 예제에서는 각 회원리스트중 "삭제" 버튼을 클릭하면 "/User/deleteUser/아이디" 를 브라우저로 호출하도록 했습니다.
URL에서 슬래시를 기준으로 첫번째는 클래스명, 두번째는 메소드명, 세번째이상은 전달 GET 변수입니다.
따라서 위 주소의 뜻은 User 클래스의 deleteUser 메소드를 "아이디"를 인자로 호출한다는의미입니다.

이제 실행할 실제 deleteUser 메소드를 작성합니다.
 
* Spac/model/User.Class.php
<?php
require_once("../Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;
   
    var $data_list = array();   

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {

        $this->setPostVars();

        //print_r($param);
        //exit;
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
      
        $param = array($this->user_id,$this->user_pw,$this->user_name);
       
        $this->Dao->setParam($param);
      
        $this->Dao->executeStatement();
      
        //echo "회원가입에 성공했습니다.";
        $this->result_uri    = "/User/getUserList";
        $this->redirect();

    }
   
    function getUserList() {
     
        $this->data_list = array();

        $query = " Select * From user_info ";
        $this->Dao->executeQuery($query);

        while($rows = $this->Dao->getFetchArray()) {
            $this->data_list[] = $rows;
        }

        $this->result_uri    = "list.html";
        $this->dispatcher();      

    }

    function getDeleteGetVars() {
        $this->user_id = $this->args[0];
    }
   
    function deleteUser() {
       
        $this->getDeleteGetVars();
       
        $query = " Delete From user_info Where user_id = ?";
        $this->Dao->prepareStatement($query);       
        $param = array($this->user_id);       
       
        $this->Dao->setParam($param);
      
        $this->Dao->executeStatement();
        $this->Dao->closeStatement();

        $this->result_uri    = "/User/getUserList";
        $this->redirect();
       
    }
   
   
   
   
   
   

}
?>


:::[getDeleteGetVars] 설명:::
위 내용중 파란색 글자 부분이 기존 User 클래스에서 추가된 내용입니다.
"getDeleteGetVars" 메소드를 보면 GET변수를 받는 방법을 알 수 있습니다.

 도메인/클래스명/메소드명/parameter1/parameter2.....

위의 형식 중 parameter를 받는 방법은
$param1 = $this->args[0];
$param2 = $this->args[1];


위의 getDeleteGetVars 예제에선 전달 변수가 1개이므로
    function getDeleteGetVars() {
        $this->user_id = $this->args[0];
    }

이처럼 변수를 받아 맴버변수로 저장했습니다.


[deleteUser] 설명

먼저 위의 getDeleteGetVars 메소드를 호출하여 전달된 변수를 맴버변수로 받습니다.
해당 변수를 user_id  조건으로 삭제 SQL 문을 처리합니다.

처리 후엔
        $this->result_uri    = "/User/getUserList";
        $this->redirect();

이처럼 회원 리스트 화면으로 이동시킵니다.


이제 브라우저에서 삭제처리를 실행하여 제대로 삭제가 이루어 지는지 테스트합니다.


'기본예제 > 회원관리' 카테고리의 다른 글

2. 회원리스트 조회  (0) 2009.12.01
1. 회원가입 예제  (0) 2009.12.01
Posted by webdata
기본예제/회원관리2009. 12. 1. 21:32
이전 예제에서 가입된 회원들의 리스트를 조회하는 예제를 해보겠습니다.

회원에 관련된 내용은 모두 User 클래스에서 실행합니다.
이전에 작성된 User 클래스에 몇가지 메소드를 추가해 보겠습니다.

* Spac/model/User.Class.php
<?php
require_once("/home/sue/www/Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    var $data_list = array();

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {          //예제를 위해 POST 값을 직접 맴버변수에 등록했음.
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {
       
        $this->setPostVars();
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
       
        $param = array($this->user_id,$this->user_pw,$this->user_name);
        $this->Dao->setParam($param);
       
        $this->Dao->executeStatement();
       
        echo "회원가입에 성공했습니다.";

        $this->Dao->closeStatement();

    }

    function getUserList() {
      
        $this->data_list = array();

        $query = " Select * From user_info ";
        $this->Dao->executeQuery($query);

        while($rows = $this->Dao->getFetchArray()) {
            $this->data_list[] = $rows;
        }

        $this->result_uri    = "list.html";
        $this->dispatcher();       

    }
}
?>

회원리스트를 모두 배열로 가져오는 메소드  getUserList 를 추가했습니다.
회원 리스트는 "list.html" 로 출력합니다.

이제 list.html 파일을 뷰에 생성합니다.

* Spac/view/list.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>회원리스트</title>
</head>
<body>

회원수는 <?=count($this->data_list)?> 명 입니다.
<br/><br/>

<table border="1">

    <tr bgcolor="#f2f2f2">
        <td width="100">아이디</td>
        <td width="120">이름</td>
        <td width="150">등록일</td>
    </tr>
 
<?php
foreach($this->data_list as $Rows) {
?>

    <tr>
        <td width="100"><?=$Rows['user_id']?></td>
        <td width="120"><?=$Rows['user_name']?></td>
        <td width="150"><?=$Rows['reg_date']?></td>
    </tr>

<?php
}
?>

</table>

<!-- 회원가입버튼을 만들어주고 클릭하면 이전에 만든 가입폼으로 이동시킵니다. -->
<input type="button" value="회원가입" onClick="document.location.href='/User/viewUserRegForm'"></input>

</body>
</html>



이제 브라우저로 출력해 보겠습니다.
아래와 같이 호출합니다.
http://localhost/User/getUserList



회원 리스트가 잘 출력되는지, 회원가입버튼을 클릭하면 이전 예제에서 만든 가입품으로 이동하는지 확인합니다.

이제  회원 가입을 하면 가입처리된 후에 위 리스트 화면으로 이동하도록 수정해 보겠습니다.

User 클래스의 "regUser" 메소드의 마지막 부분만 수정해주면 되겠습니다.

* Spac/model/User.Class.php
<?php
require_once("/home/sue/www/Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    var $data_list = array();

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {
       
        $this->setPostVars();
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
       
        $param = array($this->user_id,$this->user_pw,$this->user_name);
        $this->Dao->setParam($param);
       
        $this->Dao->executeStatement();

        $this->Dao->closeStatement();
       
        //echo "회원가입에 성공했습니다.";
        $this->result_uri    = "/User/getUserList";
        $this->redirect();

    }

    function getUserList() {
      
        $this->data_list = array();

        $query = " Select * From user_info ";
        $this->Dao->executeQuery($query);

        while($rows = $this->Dao->getFetchArray()) {
            $this->data_list[] = $rows;
        }

        $this->result_uri    = "list.html";
        $this->dispatcher();       

    }
}
?>

위 소스중 echo 로 출력해주는 부분은 주석처리하고 아래 해당 페이지로 바로 이동 (redirect) 시켜줍니다.


브라우저에서 확인하여 회원가입 -> 리스트화면 -> 회원가입화면 의 형식으로 이동이 되는지 확인합니다.

'기본예제 > 회원관리' 카테고리의 다른 글

회원데이터의 삭제 :: Spac에서 변수의 전달처리  (0) 2009.12.04
1. 회원가입 예제  (0) 2009.12.01
Posted by webdata
이 예제는 우분투리눅스 9.10 에서 작성되었으며, 윈도우에서는 구성이 다를 수 있습니다.

[준비]
1. 로컬영역에 Apache + Php + Mysql 개발 환경을 구축해 놓습니다.
   우분투리눅스에 APM을 구성하는 예제는 http://spac.tistory.com/28 을 참조하시기 바랍니다.
   예제에서 기본 아파치 웹서비스 디렉토리는 "/home/계정/www/public_html" 로 설정합니다.
 
2. 웹서비스 디렉토리는 아래와 같이 구성합니다.
    - 예제에서의 계정은 "sue" 이며, 계정안에 "www" 디렉토리를 만들고 그 안에 프로그램을 위치했습니다.
    - "Spac"  디렉토리는 Spac 프레임웍 영역이며, "public_html" 디렉토리는 웹에서 접근가능한 디렉토리입니다.






이클립스 최신 PHP 버전을 다운로드 받습니다.
이클립스 다운로드 받기 ☞ http://www.eclipse.org/downloads/

PHP이클립스를 실행시키면 아래와 같이 PHP 개발환경이 열립니다.


새 PHP 프로젝트를 생성합니다. 프로젝트 이름은 MyProject 로 하겠습니다.




Contents 항목은 이미 구성하신 로컬 계정 영역으로 합니다. (/home/sue/www)



프로젝트 구성을 마치면 아래와 같은 프로젝트 트리가 나타납니다.



코드자동완성 설정을 합니다. (Window - Preferences)




개발환경 구성이 완료되었습니다.
이제 클래스 작성시 코드 자동완성기능을 활용하실 수 있습니다.





이클립스 내에 PHP서버를 등록 해 놓으면 "Run As" 메뉴를 이용하여 쉽게 이클립스 내 브라우저로 결과를 확인할 수 있습니다.








Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 20. 00:19
이전 예제까지는 모델 클래스에서 직접 출력해 보았습니다.
이번 예제에선 모델클래스에서 가져온 결과값을 뷰에 출력하는 예제를 해보겠습니다.

예제3 의 Member 클래스를 좀 더 수정해 보겠습니다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {

    var $db_msg;
    var $data_list;
    var $total_count = 0;

    
    function Member() { }

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");        // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function getCount() {
        $query = " Select count(*) From member ";
        $this->Dao->executeQuery($query);
        //echo "<p>회원수는 " . $this->Dao->getResult() ." 명 입니다.</p>";  //주석처리

        $this->total_count            = $this->Dao->getResult();          //총레코드수를 맴버변수에 담습니다.

    }

    function getList() {
   
        $this->data_list = array();                         //결과를 담을 변수를 초기화 합니다.

        $query = " Select * From member ";          //전체 데이터 검색 쿼리문 작성
        $this->Dao->
executeQuery($query);                //쿼리문 실행

      $Result = $this->Dao->result;
        while( $Rows = $this->Dao->getFetchArray() ) { //결과값을 행을 돌며
             $this->data_list[] = $Rows;                       //결과 변수에 배열로 담습니다.
        }

        /*  --결과값을 뷰로 출력하기 위해 이부분을 주석처리 합니다.
        ec
ho "<pre>";                                      //배열로 담긴 결과값을 보기 쉽도록 출력합니다.
        print_r($this->data_list);
        echo "</pre>";
        */
     
        $this->result_uri    = "list.html";              // 뷰로 사용할 파일을 지정합니다.
        $this->dispatcher();                             // 뷰를 배치합니다.
   

  }



    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               
//기본메소드가 호출되면 DB연결을 수행합니다.

        $this->db_msg = "
데이터베이스 연결에 성공했습니다."; 

      $this->getCount();
       $this->getList();
  


    }

}
?>


위와 같이 결과값을 클래스에서 출력하지 않고 클래스 맴버변수에 저장한 뒤 뷰를 배치합니다.

뷰로 사용할 파일을 정의하였기때문에 해당 파일을 생성합니다.

* Spac/view/list.html
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>회원리스트</title>
</head>
<body>

<?php echo $this->db_msg ?>
<br/><br/>

회원수는 <?php echo $this->total_count?> 명 입니다.
<br/><br/>

<table border="1">

 <tr bgcolor="#f2f2f2">
  <td width="100">아이디</td>
  <td width="120">이름</td>
  <td width="150">등록일</td>
 </tr>

<?php
foreach($this->data_list as $Rows) {
?>

 <tr>
  <td width="100"><?=$Rows['user_id']?></td>
  <td width="120"><?=$Rows['user_name']?></td>
  <td width="150"><?=$Rows['reg_date']?></td>
 </tr>

<?php
}
?>


</table>

</body>
</html>


위의 list.html 내용을 보면 클래스내부에서 맴버변수를 가져다 사용하듯 $this->변수  방식으로 사용하는것을 알 수 있습니다.

아래는 결과 입니다.




이상으로 간단한 데이터베이스 예제를 해보았습니다.
다음 예제에서는 조건문이 들어간 쿼리문을 실행하는 예제를 해보겠습니다.

Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 18. 22:35
먼저 데이터 조회 예제를 수행하기 위해 기본 데이터를 넣어 놓겠습니다.

Insert Into member ( user_id, user_name, reg_date) values ( 'dukman', '덕만', now() );
Insert Into member ( user_id, user_name, reg_date) values ( 'misil', '미실', now() );
Insert Into member ( user_id, user_name, reg_date) values ( 'bidam', '비담', now() );

위의 쿼리문을 실행하여 데이터를 3건 등록한 후 예제2의 회원수구하는 클래스인 "Member" 를 바로 호출해 보도록 하겠습니다.


브라우저에서 결과를 확인 합니다.

결과는 "회원수는 3 명 입니다." 라고 메세지가 출력될 것입니다.


그럼 이제 실제 3명의 상세 데이터값을 가져와 봅니다.
Member 클래스를 좀 더 보완하겠습니다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {

    var $data_list;
    
    function Member() { }

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");        // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function getCount() {
        $query = " Select count(*) From member ";
        $this->Dao->
executeQuery($query);
        echo "<p>회원수는 " . $this->Dao->getResult() ." 명 입니다.</p>";
    }

    function getList() {
   
        $this->data_list = array();                         //결과를 담을 변수를 초기화 합니다.

        $query = " Select * From member ";          //전체 데이터 검색 쿼리문 작성
        $this->Dao->
executeQuery($query);                //쿼리문 실행

      $Result = $this->Dao->result;
        while( $Rows = $this->Dao->getFetchArray() ) { //결과값을 행을 돌며
             $this->data_list[] = $Rows;               //결과 변수에 배열로 담습니다.
        }

        echo "<pre>";                                      //배열로 담긴 결과값을 보기 쉽도록 출력합니다.
        print_r($this->data_list);
        echo "</pre>";

    }



    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               
//기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 


      $this->getCount();
       $this->getList();
  


    }

}
?>




브라우저에서 결과를 확인 합니다.

결과는 "회원수는 3 명 입니다." 와 회원 테이블의 정보들이 배열형태로 출력될 것입니다.





지금까지는 뷰를 거치지 않고 클래스에서 바로 출력하는 예제를 실행 해봤습니다.
다음 예제에서는 클래스에서 출력하지 않고 해당 클래스와 연결된 뷰에서 데이터를 출력하는 예제를 작성해 보겠습니다.

Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 18. 22:35

성공 메세지가 출력된다면 쿼리문의 실행 예제를 위한 테이블을 만들어보도록 하겠습니다.

회원정보를 저장할 테이블로 "member" 라는 이름의 테이블을 만듭니다. 간단한 필드만 넣어서 만들어보겠습니다.

Create Table `member` (
  `user_id` varchar(12) not null,
  `user_name` varchar(20) not null,
  `reg_date` datetime,
  primary key (`user_id`)
) engine=innodb;



위에서 만든 Member 클래스에  내용을 추가하여 위 테이블의 레코드 수를 화면에 출력 하도록 해봅시다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {
   
    function Member() {}                  //이번예제는 생성자에서 별도 할일이 없으므로 정의만 해 놓습니다.

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");        // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function getCount() {
        $query = " Select count(*) From member ";
        $this->Dao->executeQuery($query);
        echo "<p>회원수는 " . $this->Dao->getResult() ." 명 입니다.</p>";
    }

    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               
//기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 


      $this->getCount();

    }

}
?>


getCount() 메소드를 추가 하여 "member"  테이블의 레코드 수가 출력되도록 작성합니다.




브라우저에 다시 한 번 실행결과를 확인합니다.


현재는 레코드가 없으므로 "회원수는 0 명 입니다." 라고 메세지가 출력될 것입니다.



Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 16. 23:38

이제 Dao 를 Spac 프레임웍 내부로 불러와 데이터베이스에 연결하는 예제를 작성해보겠습니다.

회원 테이블을 관리하는 모델클래스를 만듭니다.

회원관리 클래스는 "Member"라는 이름으로 만듭니다.

이번 예제부터는 Spac 컨트롤러의 외부클래스 로드기능을 사용해야 하므로 "Controller" 를 상속받아 작성합니다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {

    var $Dao;
   
    function Member() {}                

    function initMember() {                            //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");      // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;              // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                        // DB를 연결합니다.
    }

    function execute() {                                 //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                           //기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 
    }

}
?>

위의 예제는 Spac 컨틀로러의 메소드인 getControllerInstance 를 사용해서 Dao 클래스를 가져왔습니다.
일반적으로 위처럼 사용하면 되지만, 이클립스를 사용하는 경우 코드 자동완성기능을 사용하시려면 직접 Dao 클래스 파일을 삽입하여 사용해야 합니다.


즉, 아래와 같이 사용합니다.
  ==> getControllerInstance 를 사용하지 않는 예제
* Spac/model/Member.Class.php
<?php
require_once("C:\AutoSet6\www\Spac\controller\Dao\Dao.Class.php");
class Member extends Controller {
   
    var $Dao;

    function Member() {}                  //이번예제는 생성자에서 별도 할일이 없으므로 정의만 해 놓습니다.

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.

       $this->Dao = new Dao;

        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               //기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 
    }

}
?>




위의  두가지 예제의 결과는 모두 같습니다만, 이클립스를 사용하여 개발할 경우 두번째 방법을 사용하면 자동완성기능이 활성화되어 더욱 편하게 개발하실 수 있습니다.





이로서 Database 연결을 구현하였습니다.

브라우저에 아래의 주소를 입력한 후 성공메세지가 출력되는지 확인합니다.


오류가 없었다면 "데이터베이스 연결에 성공했습니다." 라는 메세지가 화면에 출력될 것입니다.





Posted by webdata