在 Silex 中将路由映射到文件系统上的目录结构
Mapping route to directory structure on file system in Silex
我有这个目录层次结构:
htdocs
|-- project
|-- public
|-- module
|-- feature
|-- index.php
在样本 GET 请求中
http://example.com/module/feature/1/email@server.com
服务器 (Apache) 如何知道我的目录是 feature
而不是 1
或 email@server.com
?
我是否需要在某处进行任何进一步的配置,或者 Apache 服务器是否为我提供开箱即用的魔法?
我是否也需要在 Silex 上配置任何路由?
How the server (Apache) knows that my directory is feature
and not 1
or email@server.com
?
Silex 有 Routing System。您将路由传递给请求方法(此处为 get
),这样请求就会被捕获。
获取所有功能:
// htdocs/project/public/modules/features/index.php
$app->get('/modules/features', function (Application $app, Request $request) {
$features = $app['em']->getRepository(Feature::class)->findAll();
return $app['twig']->render('features/index.html.twig', array(
'items' => $features,
));
});
正在获取功能编号 #1:
// htdocs/project/public/modules/features/index.php
$app->get('/modules/features/{id}', function (Application $app, Request $request) {
$id = $request->get('id');
$feature = $app['em']->getRepository(Feature::class)->find($id);
return $app['twig']->render('features/show.html.twig', array(
'items' => $feature,
));
});
所以,是 YOU,而不是 Apache 来决定 return 在哪个请求上做什么。
Do I need to do any further configuration somewhere or does the Apache server do the magic for me out of the box?
Do I need to configure any routes on Silex too?
是的!您应该并且可以定义您的路线。请注意上面代码段中的 '/modules/features'
和 '/modules/features/{id}'
部分。
URL 路径与文件系统目录
URLs have a hierarchical categorising system called Path, and File System 也有类似的东西,尽管它们是完全不同的东西。
它们并不总是相同的,尽管它们可能作为简单的规则。
因此,您可以映射此 URL:
http://example.com/modules/features
到这两个文件系统位置:
htdocs/project/public/modules/features/index.php
&
htdocs/project/public/Controller/Frontend/modules/features/index.php
最后的笔记
您最好利用目录结构最佳实践。例子是:
我有这个目录层次结构:
htdocs
|-- project
|-- public
|-- module
|-- feature
|-- index.php
在样本 GET 请求中
http://example.com/module/feature/1/email@server.com
服务器 (Apache) 如何知道我的目录是 feature
而不是 1
或 email@server.com
?
我是否需要在某处进行任何进一步的配置,或者 Apache 服务器是否为我提供开箱即用的魔法?
我是否也需要在 Silex 上配置任何路由?
How the server (Apache) knows that my directory is
feature
and not1
oremail@server.com
?
Silex 有 Routing System。您将路由传递给请求方法(此处为 get
),这样请求就会被捕获。
获取所有功能:
// htdocs/project/public/modules/features/index.php
$app->get('/modules/features', function (Application $app, Request $request) {
$features = $app['em']->getRepository(Feature::class)->findAll();
return $app['twig']->render('features/index.html.twig', array(
'items' => $features,
));
});
正在获取功能编号 #1:
// htdocs/project/public/modules/features/index.php
$app->get('/modules/features/{id}', function (Application $app, Request $request) {
$id = $request->get('id');
$feature = $app['em']->getRepository(Feature::class)->find($id);
return $app['twig']->render('features/show.html.twig', array(
'items' => $feature,
));
});
所以,是 YOU,而不是 Apache 来决定 return 在哪个请求上做什么。
Do I need to do any further configuration somewhere or does the Apache server do the magic for me out of the box?
Do I need to configure any routes on Silex too?
是的!您应该并且可以定义您的路线。请注意上面代码段中的 '/modules/features'
和 '/modules/features/{id}'
部分。
URL 路径与文件系统目录
URLs have a hierarchical categorising system called Path, and File System 也有类似的东西,尽管它们是完全不同的东西。
它们并不总是相同的,尽管它们可能作为简单的规则。
因此,您可以映射此 URL:
http://example.com/modules/features
到这两个文件系统位置:
htdocs/project/public/modules/features/index.php
&
htdocs/project/public/Controller/Frontend/modules/features/index.php
最后的笔记
您最好利用目录结构最佳实践。例子是: