2016-07-01 67 views
7

Sto tentando di utilizzare un router (AltoRouter) per la prima volta e non riesco a chiamare nessuna pagina.Instradamento tramite Php AltoRouter

struttura delle cartelle Web

enter image description here Il Codice

Index.php

require 'lib/AltoRouter.php'; 

$router = new AltoRouter(); 
$router->setBasePath('/alto'); 
$router->map('GET|POST','/', 'home#index', 'home'); 
$router->map('GET|POST','/', 'display.php', 'display'); 
$router->map('GET','/plan/', 'plan.php', 'plan'); 
$router->map('GET','/users/', array('c' => 'UserController', 'a' => 'ListAction')); 
$router->map('GET','/users/[i:id]', 'users#show', 'users_show'); 
$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); 
// match current request 
$match = $router->match(); 

if($match && is_callable($match['target'])) { 
    call_user_func_array($match['target'], $match['params']); 
} else { 
    // no route was matched 
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); 
} 

Ho un file chiamato plan.php (piano display) nella cartella di programma e il collegamento ipertestuale che ho sto cercando è

<a href="<?php echo $router->generate('plan'); ?>">Plan <?php echo $router->generate('plan'); ?></a> 

whi ch non funziona.

Potete essere d'aiuto?

risposta

2

Non è possibile chiamare plan.php passando plan.php come argomento a match funzione

Controlla esempi a http://altorouter.com/usage/processing-requests.html

Se si desidera utilizzare il contenuto da plan.php

si dovrebbe usare map in il seguente formato

$router->map('GET','/plan/', function() { 
    require __DIR__ . '/plan/plan.php'; 
} , 'plan'); 

al file plan/plan.php aggiungere echo 'testing plan';

Inoltre, doppio controllo che il file .htaccess contiene

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.php [L] 

Inoltre, se si imposta il percorso base con $router->setBasePath('/alto'); i file index.php devono essere posizionati nella directory alto così il vostro url sarebbe in quel caso http://example.com/alto/index.php

esempio di lavoro:

require 'lib/AltoRouter.php'; 

$router = new AltoRouter(); 
$router->setBasePath('/alto'); 

$router->map('GET','/plan/', function() { 
    require __DIR__ . '/plan/plan.php'; 
} , 'plan'); 

// match current request 
$match = $router->match(); 

if($match && is_callable($match['target'])) { 
    call_user_func_array($match['target'], $match['params']); 
} else { 
    // no route was matched 
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); 
} 

quindi funzionerà perfettamente

<a href="<?php echo $router->generate('plan'); ?>">Plan <?php echo $router->generate('plan'); ?></a> 
+0

Ho la pagina iniziale funzionante ma non riesco a chiamare plan.php. La home page ha un collegamento al piano Plan che ho modificato in Plan generate('plan'); ?>. –

+0

home # index funziona perché molto probabilmente hai classe Home con indice di metodo al suo interno. $ router-> map ('GET', '/ plan /', function() { richiede __DIR__. '/plan/plan.php'; }, 'piano'); Quando il percorso è abbinato, questa funzione include il file plan.php. Alternativamente puoi creare un 'piano' di classe con l'indice del metodo e poi sarai in grado di passare l'indice # del piano nello stesso modo in cui si trova per la home page. –