2011-07-14 10 views
8

que estoy tratando de hacer algo con Silex (que utiliza el componente de enrutamiento de Symfony - por lo que la respuesta puede ser aplicable a Symfony también)Enrutamiento en Silex/Symfony. Proporcionando una ruta por defecto

Estoy añadiendo Silex a una aplicación heredada para proporcionar enrutamiento pero Necesito respetar la implementación predeterminada de las aplicaciones existentes para cargar archivos (que es simplemente cargar el archivo desde el sistema de archivos desde la URL especificada).

corregir: para aclarar: El archivo existente se carga desde el sistema de archivos, como una inclusión dentro de una plantilla principal, después de una serie de llamadas de inicialización.

Lo que estoy descubriendo es que a falta de una ruta definida para que coincida con las páginas heredadas, Silex lanza una excepción.

Realmente necesito una forma de proporcionar un mecanismo predeterminado (de respaldo) para manejar esas páginas heredadas, pero mi patrón debe coincidir con la URL completa (no solo con un fragmento).

¿Esto es posible?

// Include Silex for routing  
require_once(CLASS_PATH . 'Silex/silex.phar'); 

// Init Silex 
$app = new Silex\Application(); 

    // route for new code 
    // matches for new restful interface (like /category/add/mynewcategory) 

    $app->match('/category/{action}/{name}/', function($action, $name){ 
     //do RESTFUL things 
    }); 

    // route for legacy code (If I leave this out then Silex 
    // throws an exception beacuse it hasn't matched any routes 

    $app->match('{match_the_entire_url_including_slashes}', function($match_the_entire_url_including_slashes){ 
     //do legacy stuff 
    }); 

    $app->run(); 

Este debe ser un caso de uso común. Estoy tratando de proporcionar una manera de tener una interfaz RELAJANTE junto con el código heredado (/myfolder/mysubfolder/my_php_script.php carga)

+1

tengo una pregunta con respecto a su pregunta, no debe volver a escribir la URL en el mango Apache ya existente fi les sin mapear la url a su archivo index.php? suena extraño ... – mpm

+0

@camus No, porque necesitaba enrutar cada solicitud en mi aplicación a través del controlador frontal para arrancar la aplicación (seguridad, conexión a la base de datos, etc.). editar: He agregado una aclaración a la pregunta – calumbrodie

Respuesta

4

Puede utilizar el control de errores, con algo así:

use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpKernel\Exception\HttpException; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

$app->error(function (\Exception $e) use ($app) { 
if ($e instanceof NotFoundHttpException) { 
     return new Response('The requested page could not be found. '.$app['request']->getRequestUri(), 404); 
    } 
    $code = ($e instanceof HttpException) ? $e->getStatusCode() : 500; 
    return new Response('We are sorry, but something went terribly wrong.', $code); 
}); 
+0

Hola Charles, el problema no era que el error no se estaba manejando, sino que se estaba produciendo en primer lugar. Encontré una solución a mi problema. Gracias por tu contribución. – calumbrodie

Cuestiones relacionadas