2011-07-14 13 views
8

Ben çakmaktaşı kullanarak bir şeyler yapmak çalışılıyor sağlanması (Symfony'nin yönlendirme bileşeni kullanır - bu yüzden cevap yanı Symfony'de için geçerli olabilir)Yönlendirme. Varsayılan yolu

Ben yönlendirmeyi sağlamak için bir eski uygulamalara silex ekliyorum ama Dosyaları yüklemek için varolan uygulamaların varsayılan uygulamasına saygı göstermem gerekiyor (bu sadece dosyayı belirtilen URL'den dosya sisteminden yüklemektir).

düzenleme: açıklama için: Varolan dosya, bir önyükleme çağrısı dizisi yapıldıktan sonra, bir üst şablonun içine dahil olarak dosya sisteminden yüklenir.

Bulduğum şey, eski sayfalarla eşleşecek tanımlanmış bir yolun yokluğunda, Silex'in bir istisna atmasıdır.

Bu eski sayfalar için varsayılan (geri dönüş) bir mekanizma sağlama yöntemine gerçekten ihtiyacım var - ancak desenimin tüm URL ile eşleşmesi gerekiyor (yalnızca bir parça değil).

Bu mümkün mü?

// 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(); 

Bu yaygın bir kullanım durumu olmalıdır. Ben eski kodunun yanına bir RESTFUL arayüze sahip bir yolunu sağlamak için çalışıyorum (yük /myfolder/mysubfolder/my_php_script.php)

+1

bulundu url, index.php dosyanıza url eşleştirmeden mi? garip geliyor ... – mpm

+0

@camus Hayır, çünkü uygulamayı önyükleme yapmak için (güvenlik, veritabanı bağlantısı vb.) uygulamadaki her isteği ön denetleyiciden yönlendirmem gerekiyordu. edit: Sorunun cevabını – calumbrodie

cevap

4

Böyle bir şey ile, hata işleme kullanabilirsiniz:

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

Merhaba Charles'a ekledim, problem, hatanın ele alınmadığı değil, bunun yerine ilk etapta atıldığının ortaya çıkmasıydı. Problemime bir çözüm buldum. Girdiniz için teşekkürler. – calumbrodie