2010-09-25 3 views
8

Wenn core.php debug auf 1 oder 2 gesetzt ist und ich zum root meiner cakephp-seite browse ich bekomme erwartetes ergebnis, die seite serviert ist korrekt, dh , PagesController default() Aktion -> home.ctpcakephep routing - pages_controller/home.ctp fehler nur auf debug = 0

Allerdings, wenn ich debug auf 0 ändern erhalte ich die folgende Fehlermeldung:

Error: The requested address '/' was not found on this server.

Meine router.php Datei enthält:

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 
/** 
* ...and connect the rest of 'Pages' controller's urls. 
*/ 
    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

Ich habe versucht, alle c zu löschen ache-Dateien und das Entfernen von CAKE-Cookies und andere Aktionen funktionieren wie erwartet, wenn sie direkt besucht werden, z. B./user,/groups usw. Problem tritt nur auf, wenn Sie den root '/' treffen.

Ich benutze CakePHP 1.3.4 und ACL + Auth.

bearbeiten ** Ich schließe den Code für die Standard() Funktion von pages_controller.php

/** 
* Displays a view 
* 
* @param mixed What page to display 
* @access public 
*/ 
    function display() { 

     $path = func_get_args(); 

     $count = count($path); 
     if (!$count) { 
      $this->redirect('/'); 
     } 
     $page = $subpage = $title_for_layout = null; 

     if (!empty($path[0])) { 
      $page = $path[0]; 
     } 
     if (!empty($path[1])) { 
      $subpage = $path[1]; 
     } 
     if (!empty($path[$count - 1])) { 
      $title_for_layout = Inflector::humanize($path[$count - 1]); 
     } 
     $this->set(compact('page', 'subpage', 'title_for_layout')); 
     $this->render(implode('/', $path)); 

    } 
+0

Ist der PagesController :: display() in Ihrer ACL/Auth zulässig? Haben Sie "debug ifs" in Ihrem Code? –

+0

Ich habe folgendes in meiner app/app_controller.php: $ this-> Auth-> allowedActions = array ('display', 'logout'); und der einzige Ort, dass config :: write ('debug', ...) verwendet wird, ist in core.php – Owen

Antwort

11

OK ist so einfach, es ist peinlich: in home.ctp gibt es den folgenden Code ein:

if (Configure::read() == 0): 
    $this->cakeError('error404'); 
endif; 

Configure :: read() standardmäßig var Debug lesen - deshalb wirft er diesen Fehler, wenn debug ist auf 0 eingestellt.

Danke an Benjamin, dass er mich auf den richtigen Weg gebracht hat. Kuchen ist wunderbar und gleichzeitig ärgerlich, bis Sie die Grundlagen kennen!

+2

für CakePHP 2.4.3 obigen Code wird ersetzt durch if (! Configure :: lesen ('debug')): werfen neue NotFoundException(); endif; aber das Problem besteht immer noch: P – Jaid07

4

imho dieses Verhalten macht Sinn, da Sie debug auf 0 drehen, wenn Ihre Anwendung geht in Produktion (etwas sagt mir, dass Sie die Home Seite nicht als Ihre Einstiegsseite zeigen möchten). Die home.ctp, die durch die Seiten-Controller angezeigt wird, lebt in

./cake/libs/view/pages/home.ctp

Ihrer Anlage. Aber wenn man in der Produktion sind Sie aus dem

./app/views/pages

Verzeichnis die statischen Seiten anzuzeigen, die die Aufgabe der Seiten-Controller ist. Dieses Verzeichnis ist in einer frischen Kucheninstallation leer. die Antwort

+0

+1, netter Fang, das ist es wahrscheinlich. Ich erinnere mich, dass dies vor einer Weile noch nicht der Fall war, aber jemand hat es als ein potenzielles Sicherheitsproblem gemeldet. –

+0

Ich habe bereits pages_controller kopiert.php von Kuchen/config/Controller in App/Controller, und ich kopierte home.ctp nach app/Ansichten/Seiten. Wenn debug> 0 ist, ist die Seite definitiv app/views/page/home.ctp, aber wenn debug = 0, erhalte ich den Fehler. Ich habe die Standardaktion() in pages_controller.php nicht geändert, die mit der standardmäßigen Kucheninstallation geliefert wird. Ich bin mir nicht ganz sicher, was in dieser Funktion passiert, aber vielleicht ist etwas darin von der Änderung des Debug-Wertes betroffen? Ich bin mir nicht sicher, ob ich Code in einen Kommentar schreiben kann, daher bearbeite ich die Frage, um den Code für die Aktion default() einzufügen. – Owen

1

Ich möchte Code für CakePHP Version 2.4.3 aktualisieren. wie auf CakePHP Version obige Code wird mit

if (!Configure::read('debug')): 
    throw new NotFoundException(); 
endif; 

als wenn Debug auf ‚0‘ Ausnahme wirft es wird ersetzt. Sie können den folgenden Code verwenden, damit er ordnungsgemäß ausgeführt wird:

if ((Configure::read('debug')==='')): 
throw new NotFoundException(); 
endif;