2014-10-22 101 views
1

关于Silex路由的一个简单疑问。我很新的Silex的,基本上我学习它,就一切都这么好,这里是问题(??) -Silex路由问题

这是我的index.php - >

require_once __DIR__.'/../vendor/autoload.php'; 
$app = new Silex\Application(); 

$app->register(new Silex\Provider\UrlGeneratorServiceProvider()); 
use Symfony\Component\HttpFoundation\Response; 

$app->get('/', function() { 
    return 'Hello World!'; 
}); 

$app->get('/hello', function() { 
    return 'Hello From HELLO!'; 
}); 

$app->error(function (\Exception $e, $code) use($app) { 
    switch ($code) { 
     case 404: 
      $message = "Oooops Not Found"; 
      break; 
     default: 
      $message = $app['twig']->render('error500.html.twig'); 
    } 
    return new Response($message, $code); 
}); 

$app->run(); 

问题是关于路由问题,只要我们尝试访问家庭或/你好(http://mysite.devhttp://mysite.dev/hello),它就会工作。但如果我尝试访问 的链接,它不存在,像这样 - http://mysite.dev/hello/blah它会按预期的方式返回404页面($ app-> error()),但是如果我删除/ blah部分并尝试再次输入在浏览器(http://mysite.dev/hello) - 仍然我得到404,访问该网站我必须一路回到根(即http://mysite.dev)。我不知道如果我错过了一些配置或其他的东西,或者可能是一个愚蠢的,但请我是一个在编码起动。

这里是一个很好的例子: - 去https://getcomposer.org/doc/00-intro.md它会导致你的作曲家文件入门页面,如果你在这个网址这样https://getcomposer.org/doc/00-intro.md/blah的末尾添加一些东西 - 它会给你“对不起,该页面你正在寻找找不到的东西。'错误,好吧,如果你想回到入门页面,如果你尝试删除/等等,并再次输入,没有办法你仍然得到相同的错误页面,任何人都可以解释这一点。

同样在这里http://silex.sensiolabs.org/doc/

在此先感谢。

回答

1

该路线不期望后面的正斜杠。 Thsi是预期的行为,并在长度已经讨论:https://github.com/silexphp/Silex/issues/149

建议您定义的冗余路径,以斜杠隐:

$app->get('/hello', function() { 
    return 'Hello From HELLO!'; 
}); 

$app->get('/hello/', function() { 
    return 'Hello From HELLO!'; 
}); 

由于第二个参数是一个回调,这可能是:

$hello_handler = function() { 
    return 'Hello From HELLO!'; 
}; 
//or 
$hello_handler = array($object, 'handler_method'); 

$app->get('/hello', $hello_handler); 
$app->get('/hello/', $hello_handler); 

或者任何易于使用的方法,你想出。

原因是/index.html/index.html/不一样。

+0

感谢您的快速回复@Michael。 – 2014-10-22 15:43:10

+0

我的朋友不是问题。 – Mike 2014-10-22 17:33:22