2010-08-16 8 views
8

여러 MVC 레이어에서 사용되는 함수를 배치하는 가장 좋은 방법은 무엇입니까?"글로벌"Symfony 기능은 어디에 배치해야합니까?

최근에는보기와 모델에서 모두 사용되는 통계 함수를 작성해야했습니다. 내가 도우미에 넣는다면 모델 레이어에서 도우미를 로딩하는 것이 번거로웠다. 성가시다. 틀린 것처럼 보이고, 기본 컨텍스트가 없으므로이 함수가 작업에서 호출 될 때 완전히 깨진다. 내가 최상위 레벨 lib 디렉토리에 넣으면보기에 Stats::normalPercentile과 같은 전화를 걸었습니다.

다른 옵션이 있습니까? Symfony 개발자가이 같은 기능을 어디에 배치해야하는지에 대한 의견이 있습니까?

수정 : 뷰에서 정적 호출을 수행해도 문제가없는 것 같습니다. 나는 symfony가 도우미를 클래스로 쓰지 않는 것을 기반으로 이것을 추론했다. (심지어 significant discussion 이후이다.)이 경우 파일을 배치하기위한 규칙이 있는가? lib/util에 던져 주시겠습니까?

답변

7

편집과 관련하여 심포니의 도우미는 일반적으로 약간의 PHP와 접촉하는 덜 기술적 인 사람들에게는 익숙하지 않은 구문으로보기가 복잡해지지 않도록하기 위해 작성되었습니다. - '바닐라'PHP의 일류 시민이되는 기능 . 이것은 프레임 워크의이 부분에서 영감을 얻은 Ruby on Rails에서 가져온 철학입니다.

lib/에 파일을 저장하는 것은 심포니가 실제로 신경 쓰지 않는 개인적인 선호 사항이지만, 명명법은 lib/vendor/yourname을 제안합니다. 그것은 좋은 코드가 있다면 그것은 정말 좋은 코드의 경우

, 당신은 동의 당신은 package it and share it with others :

1

정적 호출에 어떤 문제가 있습니까? 나는 도우미 함수 (당신이 일종의 네임 스페이스를 가지고 있기 때문에 함수보다 낫다)에 완벽하다고 생각한다.

보기에서 통계를 수집하는 것은 상당히 이상합니다. 행동에서 왜하지 않는거야?

아마도 올바른 대답은 해결하려는 문제의 종류에 달렸을 것입니다. 당신은 정확히 당신의 도우미가해야 할 일을 설명하지 않았습니다. 필자는 일반적으로 추가 클래스 나 호출이 필요없는 일반 작업 (예 : "stripText")에 이러한 헬퍼를 사용합니다.

+0

로 할 수 있습니다 ... 그 작은 yourname 디렉토리에 질투를 보호하지 않으려 수 있습니다 정적 전화로 아무 잘못 보기에서. OP가 그것을 좋아하지 않는다면, 그는 그것을 마스크하는 도우미를 만들어야합니다. – Maerlyn

+0

보기에서 통계를 수집하지는 않지만 값의 백분위 수와 같은 계산을하고 있습니다. Symfony가 헬퍼를 클래스 안에 넣지 않았기 때문에 정적 호출이 뷰에서 눈살을 찌푸리게 한 것을 (잘못) 추측 한 것 같습니다. –

0

통계 계산은보기에 속하지 않습니다. Model 레이어에 추가하는 것을 고려하십시오. lib/util 또는 lib/model은 나에게 모두 괜찮은 것 같습니다. 예를 들어, 당신은 데이터가 공급 클래스 PercentileSequence이 같은 두 귀하의 의견 및 작업에서 재사용 될 수있는 수 :

// in your action, component or task 
$this->mySequence = new PercentileSequence($data); 

// in your view (if PercentileSequence implements Iterator) 
<?php foreach ($mySequence as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 
// or use plain old array 
<?php foreach ($mySequence->getRanks() as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 

그것은 작업 내에서 동일해야합니다.

+0

질문의 기초를 토론하지 마십시오. 모델과 뷰 모두에서 호출되어야하는 함수를 생각할 수 있습니까? 좋은. 그것이 제가 여기서 말하는 것입니다.*이 특정 인스턴스가 그들 중 하나인지 아닌지에 관해 묻는 것은 내 질문을 저해합니다. –

+0

어쩌면 당신은 Model 레이어에서 헬퍼를 로딩하거나 정적 메서드를 호출하는 방법을 고집하고있을 것입니다 :) 어쨌든, 나는 당신의 질문에 대해 투표했습니다. 누군가가 좋은 대답을하길 바랍니다. – lunohodov

+0

나의 초기 반응은 약간 무례했습니다. 이 문제는 내 애완 동물입니다. 여기에 내가하고있는 일이 적절하고 필요한 것임을 나에게 믿어 라. :) –

관련 문제