2009-11-03 40 views
7

stavo attraversando il tutorial ufficiale codeigniter quando ho colpito un intoppo ...codeigniter Function Call 404

Il tutorial avuto a salvare ed eseguire questo codice:

<?php 
class Blog extends Controller { 

    function index() 
    { 
     echo 'Hello World!'; 
    } 

    function comments() 
    { 
     echo 'Look at this!'; 
    } 
} 
?> 

se entro il seguente URL:

index.php/blog

funziona e visualizza "Ciao mondo!".

Quando modifico l'URL per visualizzare i commenti come segue:

index.php/blog/comments/

ottengo un 404.

+0

Hai mai utilizzato un instradamento? o Mod_rewrite? Oltre a ciò, non riesco a capire come funziona. [1]: http://codeigniter.com/user_guide/general/routing.html –

+0

Questo è quasi certamente un problema di routing. Assicurati di non avere percorsi catch-all dai passaggi precedenti nella guida dell'utente. Se si dispone di qualsiasi catch-alls, non verrà instradato correttamente al controller. – treeface

risposta

1

Per impostazione predefinita, il tuo esempio dovrebbe funzionare. Esamina le tue configurazioni e rimuovi .htaccess poiché il tuo esempio non usa mod_rewrite.

ripartire da zero aiuta anche a imparare;)

0

ho è un problema di aggiornamento del file.

2

se si aggiunge un? dopo index.php funziona?

http://example.com/index.php?/blog/comments 
0

Ho avuto lo stesso problema. Finito per essere che non ho mai chiuso una mia prima funzione - ho lasciato l'ultima}. Quindi la funzione che non ho chiuso ha funzionato bene, ma dopo tutto continuava a darmi un 404.

1

Vale sempre la pena provare alcune delle opzioni $ config ['uri_protocol'] in application/config/config.php.

/* 
|-------------------------------------------------------------------------- 
| URI PROTOCOL 
|-------------------------------------------------------------------------- 
| 
| This item determines which server global should be used to retrieve the 
| URI string. The default setting of "AUTO" works for most servers. 
| If your links do not seem to work, try one of the other delicious flavors: 
| 
| 'AUTO'   Default - auto detects 
| 'PATH_INFO'  Uses the PATH_INFO 
| 'QUERY_STRING' Uses the QUERY_STRING 
| 'REQUEST_URI'  Uses the REQUEST_URI 
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO 
| 
*/ 
$config['uri_protocol'] = 'AUTO'; 

Alcuni server presentano problemi con diverse opzioni, quindi provateli manualmente. Questo potrebbe non funzionare nel tuo caso ma mi ha salvato la giornata in passato.

2

Mi sono imbattuto in questo vecchio post senza una buona risposta sul perché stava accadendo. Anch'io ho riscontrato lo stesso evidente errore che hai fatto e stavo lottando per sistemarlo. Mi sono reso conto che il problema proveniva dal routing impostato in precedenti esempi di CI. La mia pagina non funzionava affatto a meno che non ho aggiunto la seguente riga all'interno config/routes.php:

$['blog'] = 'blog'; 

Questo è a causa di questa linea che considera qualsiasi cosa, diverso da quello che aveva già impostato, come argomenti per il root:

$route['(:any)'] = 'pages/view/$1'; 

Se si rimuove la riga sopra, sarà tutto il lavoro, tranne la radice non funzionerà più come ha fatto nei precedenti tutorial. Ho dovuto aggiungere anche la seguente riga in modo che possiamo chiamare le funzioni all'interno del controller:

$route['blog/(:any)'] = 'blog/$1'; 

Con entrambi questi due aggiunto, è possibile chiamare funzioni sulla radice e hanno ancora anche un controller di lavorare "blog".

0

In alcune versioni di CodeIgniter tuo nome del controller (nome del file) deve essere iniziare con la lettera maiuscola

esempio ..

Blog.php 

se la prima lettera del file non è maiuscola, può mostrare errore 404.

Problemi correlati