2013-05-23 4 views
0

젠드 프레임 워크 (2)를 처음 사용했습니다. 나는 프로젝트로서 미니 ERP를 개발해 왔으며 모든 것이 훌륭하게 보였다.젠드 프레임 워크 - 컨트롤러 - HeadScript - 'composer update'후로드되지 않음

하지만 오늘 아침에 PHPUnit을 설치하고 composer.json 파일을 업데이트하고 composer install을 실행했지만 saind nothing to install을 실행했습니다. 그런 다음 몇 가지 간단한 검색 후에 나는 composer update을 대신 실행해야한다고 언급했습니다. 업데이트 Zend Framework2.2.0 및 일부 업데이트했습니다. 젠드는 2.0.8이었습니다.

내 파트너가 데모가 실패 할 때까지 응용 프로그램을 실행했습니다. 다 잘 된 것 같습니다.

JavaScript 파일을로드하지 않아서 발생한 문제를 진단했습니다. 뷰에 필요한 JavaScript는 다음과 같이 컨트롤러를 통해 제공됩니다.

public function viewContactAction(){ 
    // Get the user id from url 
    $id = $this->params()->fromRoute('id'); 

    $this->headScript = new HeadScript(); 
    $this->headScript->appendFile('../../js/pages/lib/contact.view.js'); 
    $this->headScript->appendFile('../../js/packages/json-populate/dist/jquery.jsonPopulate.min.js'); 

    $view = new ViewModel(array('title' => 'Contact View', 'contact_id' => $id)); 
    $view->setTemplate('contacts/contacts/contact'); 

    return $view; 
    //die("User View for $id"); 
} 

는 다음 나는 Application model 아래의 레이아웃 파일에 보였다. 그것은 다른 것을 사용하고있는 것 같았다. 그리고 다음과 같이 업데이트했습니다. 이 공용 폴더 /js/pages/lib/contact.view.js에 있었던 것처럼이 파일 찾을 수 없다는 문제 같은 몇 가지 일이 될 것이라고 생각

public function viewContactAction(){ 
    // Get the user id from url 
    $id = $this->params()->fromRoute('id'); 

    //$this->headScript = new HeadScript(); 
    $this->headScript()->appendFile('../../js/pages/lib/contact.view.js'); 
    $this->headScript()->appendFile('../../js/packages/json-populate/dist/jquery.jsonPopulate.min.js'); 

    $view = new ViewModel(array('title' => 'Contact View', 'contact_id' => $id)); 
    $view->setTemplate('contacts/contacts/contact'); 

    return $view; 
    //die("User View for $id"); 
} 

, 나는 파일 경로를 변경,하지만 여전히 파일이 표시되지 않습니다.

컨트롤러의 헤드 스크립트를 더 이상 지원하지 않습니까? 아니면 방법이 바뀌 었습니까? 미리 감사드립니다.

좋아,이 파일은 내 레이아웃 파일입니다. js를 추가하는 것 외에는 변경하지 않은 것을 기억합니다.

<?php echo $this->doctype(); ?> 

<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <?php echo $this->headTitle('ZF2 '. $this->translate('Skeleton Application'))->setSeparator(' - ')->setAutoEscape(false) ?> 

     <?php echo $this->headMeta()->appendName('viewport', 'width=device-width, initial-scale=1.0') ?> 

     <!-- Le styles --> 
     <?php echo $this->headLink(array('rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon', 'href' => $this->basePath() . '/images/favicon.ico')) 
         ->prependStylesheet($this->basePath() . '/css/bootstrap-responsive.min.css') 
         ->prependStylesheet($this->basePath() . '/css/style.css') 
         ->prependStylesheet($this->basePath() . '/css/bootstrap.min.css') ?> 

     <!-- Scripts --> 

     <?php echo $this->headScript()->prependFile($this->basePath() . '/js/html5.js', 'text/javascript', array('conditional' => 'lt IE 9',)) 
             ->prependFile($this->basePath() . '/js/bootstrap.min.js') 
             ->prependFile($this->basePath() . '/js/jquery.min.js') 
             ->appendFile($this->basePath() . '/js/jquery.konnections.tableDefinition.js') 
             ->appendFile($this->basePath() . '/js/jquery.konnections.appendTemplateFromJSON.js'); ?> 
     <?php //echo $this->headScript; ?> 
    </head> 
    <body> 
     <div class="navbar navbar-inverse navbar-fixed-top"> 
      <div class="navbar-inner"> 
       <div class="container"> 
        <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> 
         <span class="icon-bar"></span> 
         <span class="icon-bar"></span> 
         <span class="icon-bar"></span> 
        </a> 
        <a class="brand" href="<?php echo $this->url('home') ?>"><?php echo $this->translate('Skeleton Application') ?></a> 
        <div class="nav-collapse collapse"> 
         <ul class="nav"> 
          <li class="active"><a href="<?php echo $this->url('home') ?>"><?php echo $this->translate('Home') ?></a></li> 
          <li class="dropdown"> 
           <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
            <?php echo $this->translate('Contacts'); ?> 
           </a> 
           <ul class="dropdown-menu"> 
            <li><a href='contacts'>Contact Table</a></li> 
            <li><a href='contacts/add-contact'>Add New Contact</a></li> 
           </ul> 
          </li> 
         </ul> 
        </div><!--/.nav-collapse --> 
       </div> 
      </div> 
     </div> 
     <div class="container"> 
      <?php echo $this->content; ?> 
      <hr> 
      <footer> 
       <p>&copy; 2005 - 2012 by Zend Technologies Ltd. <?php echo $this->translate('All rights reserved.') ?></p> 
      </footer> 
     </div> <!-- /container --> 
     <?php echo $this->inlineScript() ?> 
    </body> 
</html> 

생성 된 소스는 다음과 같습니다 (페이지가 다소 길어서 헤더 만 포함됨).

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>ZF2 Skeleton Application</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <!-- Le styles --> 
     <link href="/css/bootstrap.min.css" media="screen" rel="stylesheet" type="text/css"> 
<link href="/css/style.css" media="screen" rel="stylesheet" type="text/css"> 
<link href="/css/bootstrap-responsive.min.css" media="screen" rel="stylesheet" type="text/css"> 
<link href="/images/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon"> 
     <!-- Scripts --> 

     <script type="text/javascript" src="/js/jquery.min.js"></script> 
<script type="text/javascript" src="/js/bootstrap.min.js"></script> 
<!--[if lt IE 9]><script type="text/javascript" src="/js/html5.js"></script><![endif]--> 
<script type="text/javascript" src="/js/jquery.konnections.tableDefinition.js"></script> 
<script type="text/javascript" src="/js/jquery.konnections.appendTemplateFromJSON.js"></script>   </head> 
+0

확실한 질문 : HTML 소스에 표시됩니까? 레이아웃은 layout.phtml에서 어떻게 보이나요? – Sam

+0

아니요. 나는 레이아웃 파일로 초 안에 질문을 갱신 할 것이다. –

+0

생성 된 소스의 레이아웃 소스 및 헤드 섹션을 추가했습니다. zend 해골 앱 위에 재미있는 프로젝트입니다. –

답변

1

ControllerLevel에서 ViewHelper을 사용하려고합니다. 이렇게 할 수는 없습니다. 컨트롤러 내부에 $this->blubb()과 같은 속기 기능을 ControllerPlugins이라고합니다. ControllerPlugins 오른쪽 here at Zend\Mvc\Controller\Plugin\*의 목록을 얻을 수 있습니다.

컨트롤러 수준에서 ViewHelper에 액세스하려면 ViewHelperManager에 액세스해야합니다. 이것은 다음과 같은 방식으로 ServiceManager을 통해 이루어집니다 :

$vhm  = $this->getServiceLocator()->get('viewhelpermanager'); 
$headScript = $vhm->get('headscript'); 

$headScript->appendFile(/** ... */); 

이 지금 필요하지되었지만 확실히 작동되어야로 테스트하지 않았다. 작동하지 않을 경우 알려줘)

+0

아 ...이 서비스 로케이터 일은 흥미 롭다. 시간이있을 때 그 구현에서 줄 단위로 갈 것이다. ** 매력처럼 작동했습니다! ** –

0

위 스크립트를 수정했습니다.

이것은 확인 된 작동 코드입니다.

$vhm = $this->getServiceLocator()->get('ViewHelperManager'); 
$headScript = $vhm->get('headscript'); 
$headScript->appendFile($url);