2013-11-27 96 views
0

我只有一個控制器操作發生了一件非常奇怪的事情。這是一個視圖操作,按照預期爲其他類似控制器工作和路由,但不會路由一個特定的控制器操作。發生了什麼事是這樣的:cakePHP不會路由到默認佈局,並給出[MissingActionException]錯誤

我有一個'畫廊'控制器,當我選擇一個畫廊從索引行動來看,它會帶我到'視圖'行動,但不會顯示在默認佈局。索引操作將正確路由到並使用默認佈局,但視圖操作不會。

我也有一個職位控制器的設置完全相同,並沒有問題,所以我相信這是不是如何設置模型/控制器的畫廊控制器的問題。而且由於默認佈局適用於所有其他控制器,我不知道爲什麼它不適用於這一個?

在試圖解決這個問題時,我發現如果將其更改爲路由到'admin'佈局,則沒有問題。

在錯誤日誌中,這裏是我收到的消息。什麼是很難明白的是爲什麼默認佈局適用於所有其它控制器,但是這一個畫廊不起作用察看方法:

2013-11-27 15:06:21 Error: [MissingActionException] Action GalleriesController::js() could not be found.

#0 C:\wamp\www\DOMAIN-NAME-HERE\lib\Cake\Routing\Dispatcher.php(104): Controller->invokeAction(Object(CakeRequest))
#1 C:\wamp\www\DOMAIN-NAME-HERE\lib\Cake\Routing\Dispatcher.php(86): Dispatcher->_invoke(Object(GalleriesController), Object(CakeRequest), Object(CakeResponse))

2013-11-27 15:06:21 Error: [MissingActionException] Action GalleriesController::css() could not be found.

#0 C:\wamp\www\DOMAIN-NAME-HERE\lib\Cake\Routing\Dispatcher.php(104): Controller->invokeAction(Object(CakeRequest))
#1 C:\wamp\www\DOMAIN-NAME-HERE\lib\Cake\Routing\Dispatcher.php(86): Dispatcher->_invoke(Object(GalleriesController), Object(CakeRequest), Object(CakeResponse))

2013-11-27 15:06:21 Error: [MissingActionException] Action GalleriesController::img() could not be found.

#0 C:\wamp\www\DOMAIN-NAME-HERE\lib\Cake\Routing\Dispatcher.php(104): Controller->invokeAction(Object(CakeRequest))
#1 C:\wamp\www\DOMAIN-NAME-HERE\lib\Cake\Routing\Dispatcher.php(86): Dispatcher->_invoke(Object(GalleriesController), Object(CakeRequest), Object(CakeResponse))

我以前從未見過這種類型的錯誤消息,因爲我不要當任何其他控制器動作被調用時,它都不會得到它,這是一個謎。

這是何等的視圖方法:

public function show($slug=null) { 
    $this->layout='default';    
    if (!$slug) { 
     $this->Session->setFlash(__('Invalid gallery', true)); 
     $this->redirect(array('action' => 'index')); 
    } 
    $this->set('gallery', $this->Gallery->findBySlug($slug)); 
} 

這裏是什麼在default.thtml中佈局文件:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<meta name="description" content=""> 
<meta name="author" content=""> 
<link rel="shortcut icon" href=""> 
<title>WEBSITE TITLE</title> 
<!-- Bootstrap core CSS --> 
<!-- <link href="css/bootstrap.css" rel="stylesheet"> --> 

<!-- Custom styles for this template --> 

<link rel="stylesheet/less" href="less/bootstrap.less" media="all" /> 

<script src="js/less-1.4.1.min.js"></script> 
<link href="css/sticky-footer-navbar.css" rel="stylesheet"> 
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> 
<!--[if lt IE 9]> 
    <script src="../../assets/js/html5shiv.js"></script> 
    <script src="../../assets/js/respond.min.js"></script> 
<![endif]--> 
</head> 
<body> 
<!-- Wrap all page content here --> 
<div id="wrap"> 
    <!-- Begin page content --> 
    <div class="container"> 
    <?php echo $this->element('headerMain'); ?> 

    <div class="row"> 
     <div class="col-md-3"> 

     <?php echo $this->element('leftNavBar'); ?> 
     </div><!-- col-md-4 --> 

      <?php echo $this->Session->flash(); ?> 
      <?php echo $this->Session->flash('auth'); ?> 
      <?php echo $content_for_layout; ?> 

    </div><!-- row --> 


    </div> 

</div> 

    <?php echo $this->element('footerMain'); ?> 
<script src="js/jquery.js"></script> 
<script src="js/bootstrap.min.js"></script> 

的視圖模板的代碼:

<div class="col-md-8"> 

    <h2>Gallery photos</h2> 
    <br /> 


     <ul> 

    <?php foreach ($gallery ['Photo'] as $photo): ?> 

     <li> 

     <?php 
      echo $this->Html->image(
       $photo['imgPath'], 
       array('title' => $photo['alt_tag']), 
       array('escape' => false) 
       ); 
     ?> 

     </li> 

     <?php endforeach; ?>     
     </ul> 

感謝,保羅

+0

請粘貼此視圖的內容 –

+0

Guillemo我已經添加了上面的佈局內容。謝謝 – Paul

+0

保羅,我的意思是你打電話給你的動作視圖 –

回答

1

試試這個,註釋的所有元素,看看它是否工作,唯一的線索,我有是什麼在呼喚GalleriesController :: JS()這顯然不是一個函數你控制器。

我的第一個猜測是,在其中一個元素中,您正在執行上述操作的requestAction。我怎麼確定?容易,只需添加虛擬功能在畫廊控制器與此機構

public function js() { 
    echo "Hello World"; 
} 
+0

感謝Guillemo。可悲的是,這根本不起作用。我在這方面做了很多工作,並決定升級到最新版本的蛋糕,並使用Mark Story的資產壓縮插件來處理我較少的文件。這兩項行動都解決了這個問題。由於我無法找到解釋這個問題的模式,因爲其他控制器沒有這個問題,所以我不得不尋找能解決這個問題的東西,並讓我繼續前進。非常感謝你的幫助。 – Paul