Blog | Tag | Local | Media | Guest | Login  RSS
cakePHP에 해당되는 글 6건
오랜만에 CakePHP 관련된 글을 올리네요. 오늘은 사용자 인증 관련된 Component인 Auth Component에 대해서 적어봅니다.
Auth 컴포넌트를 쓰면 쉽게 로긴 회원 관리등을 구현할 수 있습니다.
관련글은
http://book.cakephp.org/view/172/Authentication
여기를 참조하시면 되구요.

그런데 쓰다보면 몰르고 request를 두번 날린다던가 (클릭을 두번해버려서) 그런경우에 저절로 logout 되는 현상이 있습니다.
이게 무슨 문제인가 Auth에서는 Session Component를 사용하고 있고 timeout도 기본 120초 x 10초 로 되어있는데 ...
timeout 설정은 config/core.php에 Session.timeout 란에 120이 기본으로 되있고 Security.level에 따라서 timeout 값이 늘어납니다. Security.level에는 low, midium, high 가 있는데 각각 Session.timeout 값에 300초, 100초, 10초를 곱해준 값이 실제 timeout 값이 됩니다. 그런데 level 중에 high에는 그외에 다른 게 있는데요.
주석에는
 
 CakePHP session IDs are also regenerated between requests if 'Security.level' is set to 'high'.

라고 되어 있습니다. 이 말인 즉 request 마다 세션 id가 생성된다는건데요. 내부적으로 세션 id가 어떻게 관리되는지 는 모르겠지만 기본적으로 request마다 다른 세션이라는 얘기가 됩니다.

그래서 위의 문제를 해결하기 위해서는 Security.level 를 midium 이하로 설정해야 저런 문제가 없네요 ^^
자세한거는 소스를 좀더 봐야겠네요

저작자 표시

 태그 : 
form helper에서 options 기능을 아래 처럼 사용 하면 자동으로 생성해줍니다.

$form->input('mytest', array('options' => $tests);

이런식으로 하고 test에 array( [value에 들어갈것] => [화면에 표시될것], ...) 형태로 데이터를 넣어 줍니다.
그러면 select 테그가 자동으로 생성 되는데요.

그런데 "화면에 표시될것"에 한글이 들어가게 되면 이상하게 나오지를 않습니다.
그건 화면에 표시될것 데이터를 default로 escape을 하기 때문인데요.

escape을 하지 않게 하기 위해서는 ecape라는 attribute에 false 값을 주면 됩니다.

$form->input('mytest', array('options' => $tests, 'escape' => false);

이런식으로 하면 됩니다 ^^

 태그 : 
최근에 모델에 belongsTo 관계가 적용 되지 않은 일이 있어 고생을 한적이 있다.
비단 belongsTo 뿐만아니라 member function을 정의해도 인식이 안되는 것이 였다.
모델 파일을 지워도 cakePHP에서는 동적으로 기본 model class를 생성해주기 때문에 확인할 길이 없었다.
그런데 문제는 클래스명이 였다.
특정 브랜드의 제품(모델)을 클래스로 만들었는데 의미상 모델이여서 클래스명을 

<model.php>

class Model extends AppModel {
var $name = 'Model';
}
과 같이 했는데 이렇게 하니 모델로 인식이 안되는 것이였다 -_- cakePHP 에서 내부적으로 AppModel은  Model이라는 클래스를 상속 받는다 (http://api.cakephp.org/class_model.html) 

클래스 이름을 줄때는 이미 있는게 아닌지 확인을 해보자 ^^

 태그 : 
action에서 controller에 지정된 layout을 사용하고 싶지 않은 경우 action안에서

fuction myaction() {
    $this->layout = "";
}


이렇게 layout을 지정해 줄 수있다.

 태그 : 
cakePHP에서는 log를 쓰기 위해서 Object class의 맴버 함수로 log 함수를 지원한다. cakePHP에서 대부분의 클래스들은 Object 클래스를 상속 받기 때문에 log 함수는 대부분의 클래스에서 사용할 수 있다. 형태는 다음과 같다.

Object:log ($msg, $type=LOG_ERROR)

$msg는 로그에 기록할 메시지이고 $type은 로그 type이 된다. 기본 값은 LOG_ERROR이다 type에 대한 설명은 추후 더 작성하기로 하고 사용예는 다음과 같다.

$this->log("로그 입니다.");


이렇게 사용하며 파일은 기본적으로 /app/tmp/logs/error.log 에 생기게 된다. 만약 tmp/logs 폴더가 없다면 생성해 줘야 한다.

이 log 함수는 소스를 따라가보면 core/CakeLog.php에 write 맴버함수를 call하게 되는데 이곳을 수정해주면 Log 포멧도 수정 할 수 있다.


 태그 : 
cakePHP에서는 쿠키를 사용하기 위해서 버전 1.2 부터 CookieComponent를 제공하고 있습니다.
CookieComponent에 대한 API는
http://api.cakephp.org/1.2/class_cookie_component.html#15ebb015cf3f3d6ea1fcfd656a9e2096
에서 찾아 볼 수 있습니다.

아래는 예제 입니다. (아래 코드에서 설명에 필요하지 않은 부분들은 지워서 실제로 돌아가는지는 잘 모르겠습니다. )

class TestController extends AppController {

        var $components = array('Cookie'); // Controller 에서 Cookie Componet를 사용합니다.
      
        var $cookieName = "test"; // 쿠키의 name을 정해줍니다.
        var $cookieKey = "123"; // 쿠키가 자동으로 암호화가 되는데 이때 사용할 키를 씁니다.
        var $cookieDomain = ".test.com"; // 기본 도메인을 지정해줍니다.
        
        function add() {

            $this->Cookie->write("test","hahaha"); // test라는 키에 값을 씁니다.
    }

       function view() {
               $test = $this->Cookie->read("test"); // test라는 키값을 가지는 쿠키를 읽어 옵니다.
       }
}


 태그 :