2009-07-17 5 views
1

내 cakephp 애플리케이션에서 helper.php에서 컨트롤러를 사용해야합니다. 작동하지 않습니다. 어느 누구도 작은 구문으로 설명 할 수 있습니까?도우미 컨트롤러 사용

+0

당신이 PLZ는 그 도우미를 해결 내게됩니다 말해 버전 1.1 또는 1.2 –

답변

1

도우미가 컨트롤러에 액세스하도록 설계되지 않았습니다. 컨트롤러에 액세스하려는 경우 애플리케이션 디자인을 다시 생각해 볼 수 있습니다.

나는 실제로 이와 동일한 문제가 발생했습니다. CakePHP 1.1 응용 프로그램에서 컨트롤러의 이름을 뷰의 매개 변수로 전달하여 컨트롤러에 액세스했습니다. 1.2에서 작동하도록 코드를 업그레이드하려고 시도한 후에 이것이 잘못된 설계임을 깨달았습니다. 그것은 CakePHP와 MVC에 대한 나의 첫 경험이었습니다. 그래서 저는 이것을 교훈으로 삼아 초청했습니다.

MVC는 올바른 위치 (컨트롤러, 모델 또는 뷰)에 기능을 배치하기 위해 일부 초기 설계가 필요합니다.

+0

를 사용하고 CakePHP의에서 일하고 ... 같은 이전 게시물을 :(이있다 realiced 모달에 액세스 하시겠습니까? *** –

0

그 MVC (추신 : 당신은 또한 irc.freenode.net에 #cakephp 채널을 시도 할 수 있습니다).

도우미에서 컨트롤러를 사용하지 말고 컨트롤러에서 도우미를 사용하십시오.

왜 처음에는 그렇게하지 않을 것입니까?

이 읽기 ​​:

http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

3

난 정말 어떻게 생각 나 대신 무엇을 말하는 말해 수 코드를 생각 싫어 ... 어쨌든 ... 여기를로드하기위한 예입니다 컨트롤러는 페이지를 렌더링하고 도우미 내부의 모든 컨트롤러를로드 할 수 있습니다.

<?Php 
class HelperNameHelper extends AppHelper{ 

    private $controller; 

    public function __construct(View $view, $settings = array()) { 
     parent::__construct($view, $settings); 

     $this->controller=$this->loadController(); 

    } 

    protected function loadController($name=null){ 
     if (is_null($name)) $name=$this->params['controller']; 
     $className = ucfirst($name) . 'Controller'; 
     list($plugin, $className) = pluginSplit($className, true); 
     App::import('Controller', $name); 
     $cont = new $className; 
     $cont->constructClasses(); 
     $cont->request=$this->request; 
     return $cont; 
    } 
} 

편집 :? 바로이 2.2.3

+1

+1에 대한 +1 코드가 무엇을 해야할지를 대신 생각하는 법을 말해 줄 수 있다고 생각하는 것을 정말 싫어합니다. *** 규칙은 목적을 위해 존재한다는 것을 항상 지적해야합니다. 당신이하고있는 일과 이해 관계가 무엇인지를 절대적으로 이해하고 있다면, 이것은 더 큰 이익을 위해 컨벤션을 조작하는 좋은 예입니다. 'App :: import()'는 그들이하는 일을 이해하는 개발자를 위해 존재합니다. 다른 사람들은 아마 옹호했다. 신생아가 부작용을 이해하지 않고 방법을 악용하는 것을 막기위한 협약. – Fr0zenFyr

+0

규칙이 깨질 수 있습니다. P –

관련 문제