PHP Framework의 새로운 관심사 – Kohana, Jelly

웹게임 개발용 프레임워크를 찾다가 엉뚱하게 Kohana라는  PHP 프래임워크를 찾게 되었습니다.  거기다 Jelly 라는 ORM(Object Relational Mapping) 라이브러리도 알게 되었습니다. 소개글은 각 홈페이지의 글로 적어 드립니다. 번역은 번역기로.. ^^

Kohana – Kohana is an elegant HMVC(Hierarchical Model View Controller) PHP5 framework that provides a rich set of components for building web applications.

Jelly – An Open Source Object Relational Mapping library for Kohana 3

그 많고 많은 PHP 프레임워크 중에서 Kohana가 눈에 띈 이유는 다름아닌 코딩 스타일 때문입니다. 또한 기존의 CakePHP, CI(CodeIgniter) 류의 프레임워크로는 만족하지 못한 것들이 있었는데 Kohana에서는 만족할수 있을것 같아 보이는 것들이 있습니다.

일단 예제 코딩 함 보시죠.

class Controller_User extends Controller {

    public function action_register()
    {
        $user = Model::factory('user');

        $post = Validate::factory($_POST)
            ->filter(TRUE, 'trim')

            ->filter('username', 'strtolower')

            ->rule('username', 'not_empty')
            ->rule('username', 'regex', array('/^[a-z_.]++$/iD'))
            ->rule('username', array($user, 'unique_username'))

            ->rule('password', 'not_empty')
            ->rule('password', 'min_length', array('6'))
            ->rule('confirm',  'matches', array('password'))

            ->rule('use_ssl', 'not_empty')
            ->rule('use_ssl', 'in_array', array(array('yes', 'no')))

            ->callback('password', array($user, 'hash_password'));

        if ($post->check())
        {
            // Data has been validated, register the user
            $user->register($post);

            // Always redirect after a successful POST to prevent refresh warnings
            URL::redirect('user/profile');
        }

        // Validation failed, collect the errors
        $errors = $post->errors('user');

        // Display the registration form
        $this->request->response = View::factory('user/register')
            ->bind('post', $post)
            ->bind('errors', $errors);
    }

}

가이드에 등록된 회원가입용 예제 Controller 클래스입니다. 어떻게 느끼실지 모르겠지만 “Validate::factory()->rule()->rule() …”부분이 jQuery의 형식과 유사하다고 느끼고 있습니다. 비슷한것 같죠?

위 예제는 회원가입시 validation을 처리하는 예제인데요. 코딩 스타일 말고 또 재미있던것이 회원이름의 중복검사 부분입니다.

->rule('username', array($user, 'unique_username'))

Validate 객체에 rule을 추가하는데 $user(Model::factory를 이용해서 생성)에 ‘unique_username’이라는 값을 주는걸로 끝나는 군요. 실제로 이렇게 rule을 추가하면 중복검사용 db 쿼리까지 알아서 하는지 모르겠지만 왠지 그럴것 같아 보입니다. ^^

모델 클래스의 예제 소스도 볼까요?

class Model_User extends Model {

    public function register($array)
    {
        // Create a new user record in the database
        $id = DB::insert(array_keys($array))
            ->values($array)
            ->execute();

        // Save the new user id to a cookie
        cookie::set('user', $id);

        return $id;
    }

}

음… 쿼리를 생성해서 실행시키는 방식처럼 보이네요. 자세한건 저도 좀 봐야 겠습니다. 그리고 Jelly라고 ORM 라이브러리를 사용 할 때의 코드를 볼까요?

// Creating a new recode
Jelly::factory('post')
     ->set(array(
         'name' => 'A new post',
         'published' => TRUE,
         'body' => $body,
         'author' => $author,
         'tags' => $some_tags,
     ))->save()

// Updating a record
$post = Jelly::select('post')->load(1);
$post->name = $new_name;
$post->save();

// Saving a record from $_POST data
Jelly::factory('post', $_POST)->save();

// Deleting the currently loaded record
$post = Jelly::select('post')->load(1);
$post->delete();

// Deleting a record without having to load it (unique_key를 사용)
Jelly::factory('post')->delete($id);

어떠신가요? 역시 쿼리를 생성하여 실행해 주는 방식인것 같습니다. 다만 사용하는 명령어가 조금 다르네요. 좀 써봐야 어떤것이 좋은지 알 수 있을것 같습니다. 그러나 조금만 적응되면 정말 개발할때 편할것 같네요.

일단 오늘은 여기까지 소개하겠습니다. 시간 날때 작은 사이트 개발용 프레임워크로 사용해 봐야 겠습니다. 실전으로 바로 적용해보면 답이 빨리 나오니까요. ^^

아참. Kohana, Jelly를 알게 한 게임 프레임워크 이야기를 하지 않았네요. Modular Gaming 이라는 프레임워크인데요 아직 버전이 0.6.5 밖에 않되었네요. 그리고 만족할 만한 문서도 없어서 아쉽네요.

Modular Gaming – Modular Gaming is an open source browser game framework based on Kohana 3.x.

Advertisements

Published by: benant

WEB PROGRAMMER. PHP, ASP, XML, Javascript, VBScript, PL/SQL, MySQL, Oracle. scrollads.co.kr 새로운 모바일 광고 서비스. trenue.com 시스탬 트래이딩 서비스. blogman.co.kr 블로그 운영 관리 서비스. creget.co.kr 해외 상품 구매대행. 핫딜 정보 제공 서비스. fgshop.co.kr - 독립형 쇼핑몰 솔루션.

카테고리 Web태그, , , 댓글 남기기

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중