在 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 而不是 1email@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

最后的笔记

您最好利用目录结构最佳实践。例子是:

&PHP Namespaces