From ea153a9e3749af79a37e5863fd81cab8ab3be349 Mon Sep 17 00:00:00 2001 From: Roman Marintsenko Date: Fri, 4 May 2012 18:11:07 +0300 Subject: [PATCH 1/2] init cookbook entry about apacher router, using comments by @jalliot from #521 --- cookbook/configuration/apache_router.rst | 99 ++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 cookbook/configuration/apache_router.rst diff --git a/cookbook/configuration/apache_router.rst b/cookbook/configuration/apache_router.rst new file mode 100644 index 00000000000..110fade3c5f --- /dev/null +++ b/cookbook/configuration/apache_router.rst @@ -0,0 +1,99 @@ +.. index:: + single: Apache Router + +How to use Apache Router +========================= + +Symfony2, while fast out of the box, also provides various ways to increase that speed with a little bit of tweaking. +One of these ways is by letting apache handle routes directly, rather than using Symfony2 for this task. + +Change router configuration parameters +-------------------------------------- + +To to be to dump Apache routes we must first tweak configuration parameters and tell +Symfony2 to use ApacheUrlMatcher instead of the default one: + +.. code-block:: yaml + + # app/config/config_prod.yml + parameters: + router.options.matcher.cache_class: ~ # disable router cache + router.options.matcher_class: Symfony\Component\Routing\Matcher\ApacheUrlMatcher + +.. tip:: + + Note that **ApacheUrlMatcher** extends **UrlMatcher** so even if you don't regenerate + the url_rewrite rules, everything will work (because at the end of **ApacheUrlMatcher::match()** + a call to **parent::match()** is done). + +Generating mod_rewrite rules +--------------------------- + +To test that it's working, let's create a very basic route for demo bundle: + +.. code-block:: yaml + + # app/config/routing.yml + hello: + pattern: /hello/{name} + defaults: { _controller: AcmeDemoBundle:Demo:hello } + + +Now we generate **url_rewrite** rules: + +.. code-block:: text + + php app/console router:dump-apache -e=prod --no-debug + +Which should roughly output the following: + +.. code-block:: text + + # skip "real" requests + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule .* - [QSA,L] + + # hello + RewriteCond %{REQUEST_URI} ^/hello/([^/]+?)$ + RewriteRule .* app.php [QSA,L,E=_ROUTING__route:hello,E=_ROUTING_name:%1,E=_ROUTING__controller:AcmeDemoBundle\:Demo\:hello] + +You can now rewrite **web/.htaccess** to use new rules, so with our example it should look like this: + +.. code-block:: text + + + RewriteEngine On + + # skip "real" requests + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule .* - [QSA,L] + + # hello + RewriteCond %{REQUEST_URI} ^/hello/([^/]+?)$ + RewriteRule .* app.php [QSA,L,E=_ROUTING__route:hello,E=_ROUTING_name:%1,E=_ROUTING__controller:AcmeDemoBundle\:Demo\:hello] + + +.. note:: + + Procedure above should be done each time you add/change a route if you want to take full advantage of this setup + +That's it! +You're now all set to use Apache Route rules. + +Additional tweaks +----------------- + +To save a little bit of processing time, change in **web/app.php** occurences of **Request** into **ApacheRequest**:: + + // web/app.php + + require_once __DIR__.'/../app/bootstrap.php.cache'; + require_once __DIR__.'/../app/AppKernel.php'; + //require_once __DIR__.'/../app/AppCache.php'; + + use Symfony\Component\HttpFoundation\ApacheRequest; + + $kernel = new AppKernel('prod', false); + $kernel->loadClassCache(); + //$kernel = new AppCache($kernel); + $kernel->handle(ApacheRequest::createFromGlobals())->send(); \ No newline at end of file From 201dda6acd9ac1ed05a3453f2858002645e1aabd Mon Sep 17 00:00:00 2001 From: Inori <ïnoryy@gmail.com> Date: Mon, 7 May 2012 22:08:54 +0300 Subject: [PATCH 2/2] tweaks as mentioned in PR comments --- cookbook/configuration/apache_router.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cookbook/configuration/apache_router.rst b/cookbook/configuration/apache_router.rst index 110fade3c5f..4fadeadb7da 100644 --- a/cookbook/configuration/apache_router.rst +++ b/cookbook/configuration/apache_router.rst @@ -2,12 +2,12 @@ single: Apache Router How to use Apache Router -========================= +======================== Symfony2, while fast out of the box, also provides various ways to increase that speed with a little bit of tweaking. One of these ways is by letting apache handle routes directly, rather than using Symfony2 for this task. -Change router configuration parameters +Change Router Configuration Parameters -------------------------------------- To to be to dump Apache routes we must first tweak configuration parameters and tell @@ -22,7 +22,7 @@ Symfony2 to use ApacheUrlMatcher instead of the default one: .. tip:: - Note that **ApacheUrlMatcher** extends **UrlMatcher** so even if you don't regenerate + Note that :class: `Symfony\\Component\\Routing\\Matcher\\ApacheUrlMatcher` extends :class: `Symfony\\Component\\Routing\\Matcher\\UrlMatcher` so even if you don't regenerate the url_rewrite rules, everything will work (because at the end of **ApacheUrlMatcher::match()** a call to **parent::match()** is done). @@ -41,13 +41,13 @@ To test that it's working, let's create a very basic route for demo bundle: Now we generate **url_rewrite** rules: -.. code-block:: text +.. code-block:: bash php app/console router:dump-apache -e=prod --no-debug Which should roughly output the following: -.. code-block:: text +.. code-block:: apache # skip "real" requests RewriteCond %{REQUEST_FILENAME} -f @@ -57,7 +57,7 @@ Which should roughly output the following: RewriteCond %{REQUEST_URI} ^/hello/([^/]+?)$ RewriteRule .* app.php [QSA,L,E=_ROUTING__route:hello,E=_ROUTING_name:%1,E=_ROUTING__controller:AcmeDemoBundle\:Demo\:hello] -You can now rewrite **web/.htaccess** to use new rules, so with our example it should look like this: +You can now rewrite `web/.htaccess` to use new rules, so with our example it should look like this: .. code-block:: text