2011-02-02 2 views
3

보기에서 사용 된 컨트롤러의 이름을 요청할 수없는 이유는 무엇입니까?

예를 들어, someview.php에는 다음이 포함

<?php echo Request::$controller; ?>

Kohana 오류를 보여줍니다 : "ErrorException [치명적인 오류] : 선언되지 않은 정적 속성에 액세스 : 요청 : $ 컨트롤러"

왜 ? 뭐가 문제 야?

는이 일을 위해 나를 위해 필요 :

<?php if (Request::$controller != 'index') { ?> <a href="/">Example.com</a> <?php } else { ?> Example.com <?php } ?>

답변

4

컨트롤러에, 대신에이 작업을 수행 :

View::bind_global('controller', $this->request->param('controller')); 

이 그럼 당신은 모든보기에 $controller에 액세스 할 수 있습니다.

+0

답 해 주셔서 감사합니다, yoda! 이게 내 사건의 유일한 해결책인가? – Azat

+0

보기에서 직접 개체를 호출하면 안됩니다. 그렇습니다. 그럼에도 불구하고 여러 가지 방법이 있지만 항상 각 뷰에 변수를 설정해야합니다.이 방법은 글로벌이며 추가 작업이 필요하지 않습니다. – yoda

+0

유감스럽게도'bind_global'을 사용하려고하면 Kohana가 "ErrorException [Strict] : 변수 만 참조로 전달해야합니다"라고 말합니다. 'bind_global' 대신에'set_global'을 사용하지만'$ controller' 변수는 항상 비어있게됩니다. – Azat

1

yoda가 제안한대로 할 것이지만 컨트롤러에 로직을 넣을 수도 있습니다.

집으로 돌아 오는 링크를 원한다고 생각합니까?

$link = (Request::$controller != 'index') ? '<a href="/">Example.com</a>' : 'Home'; 
$this->template->set_global('homeLink', $link); 

도 잊지 마세요 당신은 Route::get() 또는 친구 중 하나를 사용하여 경로에서 링크를 구축 할 수 있습니다.

+0

그래, 사용자가 이미 사이트의 루트 페이지에 머무를 때 사이트의 루트 페이지에 대한 링크가 표시되지 않도록하고 싶습니다. 루트 페이지에 대한 링크는 사용자가 사이트의 다른 페이지에있는 경우에만 표시되어야합니다. – Azat

+0

여전히 "선언되지 않은 정적 속성에 대한 액세스 : Request :: $ controller"라고되어 있습니다 :(다른 곳에서 뭔가 잘못했을 수도 있습니다.) – Azat

+1

@Azat 컨트롤러 컨텍스트에 있습니까? 시도해보십시오. $ this-> request-> controller '[email protected] : 템플릿 컨트롤러 컨텍스트에있었습니다. 이제는 모두 작동합니다. bind_global 및 $ this-> request-> controller'를 사용합니다.이 작업이 내 작업을 용인하는 가장 좋은 방법입니까? (내가 전에했던 것처럼) 나쁜 결정을 내릴 때 View에서 직접 컨트롤러의 이름을 가져올 수 있습니까? – alex

3

요청은 정적 메서드로 액세스해야하므로 추가 정적 속성을 정의 할 필요가 없습니다. 그것을 얻기 위해 글로벌보기 vars.

Request::instance()은 기본 요청 인스턴스 ('mother instance')를 반환합니다. Request::current()은 컨트롤러에서 $this->request으로 액세스 할 수있는 것과 동일한 현재 요청의 인스턴스를 반환합니다.

<? if (Request::current()->controller !== 'index') : ?> 

은 ": 정의되지 않은 속성을 : 요청 : $ 컨트롤러를 ErrorException [공지 사항]"줄 Kohana 3.1

에서

<? if (Request::current()->controller !== 'index') : ?> 

    <a href="<?= URL::site() ?>">Example.com</a> 

<? else : ?> 

    Example.com 

<? endif; ?> 
+0

위대한, Kemo. 이것이 내가 필요한 것입니다. 희망이 내 경우에는 최고의 솔루션입니다. – Azat

+0

그것은 유일한 해결책입니다 (보기에 지나치게 길게 보일 것입니다.) – Kemo

+0

전혀 아닙니다. 또한 정보가 필요할 때마다 메소드를 호출하는 것이 아니라 변수를 갖는 것이 좋습니다. – yoda

0

. 그렇다면 단순히 Request :: current() -> controller()를보기에서 사용 가능/최선의 실행/최적의 성능으로 사용하고 있습니까?

<? if (Request::current()->controller() !== 'index') : ?> 

    <a href="<?= URL::site() ?>">Example.com</a> 

<? else : ?> 

    Example.com 

<? endif; ?> 
0

Kohana 3.2 :

을 : 컨트롤러에서 (난 당신이 bind_global 사용할 수 없다는 것을 정말 바보 정말 찾기)

View::set_global('controller', $this->request->current()->controller()); 

그런 다음보기에, 당신이 사용할 수있는이 붙여 넣기

echo ($controller);