2013-10-22 2 views
-2

모델에 getThumbnail()이라는 함수가 있습니다.뷰에서 모델 함수 호출?

뷰 파일에서이 함수를 어떻게 호출합니까?

현재 내가 사용하고있는 것은 : 호출하면 제대로 보이지 않습니다보기에서 직접 모델에 있기 때문에

<?php 
$tmp = new Model(); 
echo $tmp->getThumbnail(1); 
?> 

이러한 목표를 달성하기 위해 다른 방법이 있나요.

+0

... MVC의 C 인 _controller_라는 멋진 개념이 있습니다. 그것과 그것의 개념을 한번보세요. – akluth

+0

컨트롤러에 대해 알고 있습니다. 문제는 매개 변수가 getThumbnail() 함수로 전달되어야하며 매개 변수가 뷰의 루프 내부에서 획득되어야한다는 것입니다. –

+1

정확히 "모델 기능"은 무엇입니까? 모델은 ** 클래스 또는 객체가 아닙니다 **. 모델은 계층입니다. 그것으로부터 구조체에 접근하고 싶다면 서비스를 사용해야한다 :'$ im = $ this-> serviceFactory-> create ('ImageProcessing'); $ im-> getThumbnail ($ i);'. 'serviceFactory'는 뷰와 컨트롤러 모두에 의존해야합니다. 그리고 다시 ... 나는 당신이 "견해"가 없다는 느낌을 갖습니다. 멍청한 템플릿들만 잔뜩. –

답변

1

보기에서 모델로 호출하는 것은 좋지 않습니다.

조회수는 컨트롤러의 부하입니다. 모델은 컨트롤러에서만 전달되어야합니다.

2

올바르게 수행하는 방법은 꽤 광범위한 주제이며, 정답은 없습니다. 그러나 확실히 지적해야 할 한 가지는 뷰 내부에서 모델 클래스를 인스턴스화하는 것이 분명히 잘못되었다는 것입니다. 대신, 당신은해야 하나 :

  1. 은보기로 컨트롤러에서 Model의 인스턴스에 합격하거나,
  2. 뷰는 일부 또는 일부를 호출 할 수있는 뷰 컨트롤러에서 "디스패처"개체를 전달 간접적으로 모델의 기능, 예를 들면 :

    echo $dispatcher->dispatch('Model', 'getThumbnail', 1); 
    

    이 디스패처 수있는 모델 방법이 문제의 괜찮은 분리를 적용하기 위해, 제한하는 경우 그것은 많은 이해된다. 예를 들어 뷰는 User::createNewUser 또는 그와 같은 모델에서 상태를 수정하는 호출을해서는 안됩니다. 뷰는 "수동"모델 메서드를 호출하여 데이터를 가져올 수 있어야합니다.

대신 특정 모델을 하드 코딩, 당신이보기에 의존성을 주입 에 원하는 여기에있는 주요 포인트는 직접 호출합니다. 이것은 뷰 - 모델 관계뿐만 아니라 모든 종속성에 대한 것입니다.

+0

Dispatcher가 올바르게 들립니다. 어떻게 만들 수 있습니까? –

+0

매우 간단하거나 매우 복잡 할 수 있습니다. 위의 코드는 단순히'public function dispatch ($ class, $ method, $ arg) {$ obj = new $ class; return $ obj -> $ method ($ arg); }'하지만 레지스트리 나 의존성 주입 컨테이너가 필요할 수도있는 클래스를 인스턴스화하는 데 더 많은 논리가 필요할 것입니다. 어쨌든, 당신은 의존성 주입에 대해 더 많이 배워야한다. 그 이유는 현재 코드가 왜 나쁜지를 보여 주어야하며 처음부터 끝까지 철학을 이해하고 따르는 경우 올바른 방향으로 자동으로 연결될 것입니다. – deceze

+2

@ tereško 유감스럽게 생각합니다. MVC와 DI에 대한 철학적 인 배경이 아니라, 개념과 다른 방식으로 라벨을 붙이는 것으로이 답변에 불만을 나타 냈습니다. – deceze

관련 문제