diff --git a/RECIPES.md b/RECIPES.md
index 74c6fb17..53d354e5 100644
--- a/RECIPES.md
+++ b/RECIPES.md
@@ -574,7 +574,7 @@ Additional recipes can be found on the [Main Recipes Repository](https://github.
| [sonata-project/form-extensions](https://packagist.org/packages/sonata-project/form-extensions) | [1.4](sonata-project/form-extensions/1.4) |
| [sonata-project/media-bundle](https://packagist.org/packages/sonata-project/media-bundle) | [4.0](sonata-project/media-bundle/4.0) |
| [sonata-project/notification-bundle](https://packagist.org/packages/sonata-project/notification-bundle) | [3.4](sonata-project/notification-bundle/3.4) |
-| [sonata-project/page-bundle](https://packagist.org/packages/sonata-project/page-bundle) | [4.0](sonata-project/page-bundle/4.0) |
+| [sonata-project/page-bundle](https://packagist.org/packages/sonata-project/page-bundle) | [4.9](sonata-project/page-bundle/4.9) |
| [sonata-project/translation-bundle](https://packagist.org/packages/sonata-project/translation-bundle) | [2.3](sonata-project/translation-bundle/2.3) |
| [sonata-project/twig-extensions](https://packagist.org/packages/sonata-project/twig-extensions) | [1.2](sonata-project/twig-extensions/1.2) |
| [spatie/symfony-ignition-bundle](https://packagist.org/packages/spatie/symfony-ignition-bundle) | [0.0](spatie/symfony-ignition-bundle/0.0) |
diff --git a/archived/sonata-project.page-bundle/551c5070ffd41a2a76327a504b2d29da3da77559.json b/archived/sonata-project.page-bundle/551c5070ffd41a2a76327a504b2d29da3da77559.json
new file mode 100644
index 00000000..9ea928a9
--- /dev/null
+++ b/archived/sonata-project.page-bundle/551c5070ffd41a2a76327a504b2d29da3da77559.json
@@ -0,0 +1,250 @@
+{
+ "manifests": {
+ "sonata-project/page-bundle": {
+ "manifest": {
+ "bundles": {
+ "Sonata\\PageBundle\\SonataPageBundle": [
+ "all"
+ ]
+ },
+ "copy-from-recipe": {
+ "config/": "%CONFIG_DIR%/",
+ "src/": "%SRC_DIR%/"
+ },
+ "post-install-output": [
+ " * Your Page is almost ready:",
+ " 1. Generate a migration for Sonata Page Database bin/console doctrine:migrations:diff",
+ " ",
+ " If you use Doctrine Attribute Reference, You must change Sonata Entities generated in Entity folder.",
+ " You can check more details at https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/attributes-reference.html",
+ "",
+ " You can also use Rector to refactor, check more details at https://getrector.org/blog/how-to-upgrade-annotations-to-attributes",
+ " ",
+ " 2. Apply the migration generated bin/console doctrine:migrations:migrate --no-interaction",
+ " 3. Create your first site: bin/console sonata:page:create-site --enabled --name=localhost --locale=- --host=localhost --relativePath=- --enabledFrom=now --enabledTo=- --default",
+ " After you generate your site, You will see few commands to execute to have your Site ready.",
+ "",
+ " * Read> the documentation at https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/"
+ ]
+ },
+ "files": {
+ "config/packages/sonata_page.yaml": {
+ "contents": [
+ "sonata_block:",
+ " default_contexts: [sonata_page_bundle]",
+ "",
+ "sonata_admin:",
+ " assets:",
+ " extra_javascripts:",
+ " - bundles/sonatapage/app.js",
+ " extra_stylesheets:",
+ " - bundles/sonatapage/app.css",
+ "",
+ "# https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/reference/advanced_configuration/",
+ "sonata_page:",
+ " multisite: host",
+ " use_streamed_response: false",
+ "",
+ " router_auto_register:",
+ " enabled: true",
+ " priority: 150",
+ " ignore_route_patterns:",
+ " - ^(.*)admin(.*) # ignore admin route, ie route containing 'admin'",
+ " - ^_(.*) # ignore symfony routes",
+ " ignore_routes:",
+ " - sonata_page_cache_esi",
+ " - sonata_page_cache_ssi",
+ " - sonata_page_js_sync_cache",
+ " - sonata_page_js_async_cache",
+ " - sonata_cache_esi",
+ " - sonata_cache_ssi",
+ " - sonata_cache_js_async",
+ " - sonata_cache_js_sync",
+ " - sonata_cache_apc",
+ " ignore_uri_patterns:",
+ " - ^/admin\\/ # ignore admin route, ie route containing 'admin'",
+ "",
+ " #https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/reference/page_composer/",
+ " default_template: default",
+ " templates:",
+ " default:",
+ " path: '@SonataPage/layout.html.twig'",
+ " name: 'default'",
+ " containers:",
+ " header:",
+ " name: Header",
+ " content_top:",
+ " name: Top content",
+ " content:",
+ " name: Main content",
+ " content_bottom:",
+ " name: Bottom content",
+ " footer:",
+ " name: Footer",
+ " matrix:",
+ " layout: |",
+ " HHHHHHHH",
+ " HHHHHHHH",
+ " TTTTTTTT",
+ " TTTTTTTT",
+ " CCCCCCCC",
+ " CCCCCCCC",
+ " BBBBBBBB",
+ " BBBBBBBB",
+ " FFFFFFFF",
+ " FFFFFFFF",
+ "",
+ " mapping:",
+ " H: header",
+ " T: content_top",
+ " C: content",
+ " B: content_bottom",
+ " F: footer",
+ "",
+ " direct_publication: '%kernel.debug%'",
+ "",
+ " catch_exceptions:",
+ " not_found: [404] # render 404 page with \"not_found\" key (name generated: _page_internal_error_{key})",
+ " fatal: [500] # so you can use the same page for different http errors or specify specific page for each error",
+ ""
+ ],
+ "executable": false
+ },
+ "config/routes/sonata_page.yaml": {
+ "contents": [
+ "sonata_page_exceptions:",
+ " resource: '@SonataPageBundle/Resources/config/routing/exceptions.xml'",
+ " prefix: /",
+ ""
+ ],
+ "executable": false
+ },
+ "src/Entity/SonataPageBlock.php": {
+ "contents": [
+ "php bin/console doctrine:migrations:diff",
+ " 2. Apply the migration generated php bin/console doctrine:migrations:migrate --no-interaction",
+ " 3. Create your first site: bin/console sonata:page:create-site --enabled --name=localhost --locale=- --host=localhost --relativePath=- --enabledFrom=now --enabledTo=- --default",
+ " Now you can create your first page at /admin",
+ "",
+ " * Documentation> https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/"
+ ]
+ },
+ "files": {
+ "config/packages/sonata_page.yaml": {
+ "contents": [
+ "sonata_block:",
+ " default_contexts: [sonata_page_bundle]",
+ "",
+ "sonata_admin:",
+ " assets:",
+ " extra_javascripts:",
+ " - bundles/sonatapage/app.js",
+ " extra_stylesheets:",
+ " - bundles/sonatapage/app.css",
+ "",
+ "# https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/reference/advanced_configuration/",
+ "sonata_page:",
+ " multisite: host",
+ " use_streamed_response: false",
+ "",
+ " router_auto_register:",
+ " enabled: true",
+ " priority: 150",
+ " ignore_route_patterns:",
+ " - ^(.*)admin(.*) # ignore admin route, ie route containing 'admin'",
+ " - ^_(.*) # ignore symfony routes",
+ " ignore_routes:",
+ " - sonata_page_cache_esi",
+ " - sonata_page_cache_ssi",
+ " - sonata_page_js_sync_cache",
+ " - sonata_page_js_async_cache",
+ " - sonata_cache_esi",
+ " - sonata_cache_ssi",
+ " - sonata_cache_js_async",
+ " - sonata_cache_js_sync",
+ " - sonata_cache_apc",
+ " ignore_uri_patterns:",
+ " - ^/admin\\/ # ignore admin route, ie route containing 'admin'",
+ "",
+ " #https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/reference/page_composer/",
+ " default_template: default",
+ " templates:",
+ " default:",
+ " path: '@SonataPage/layout.html.twig'",
+ " name: 'default'",
+ " containers:",
+ " header:",
+ " name: Header",
+ " content_top:",
+ " name: Top content",
+ " content:",
+ " name: Main content",
+ " content_bottom:",
+ " name: Bottom content",
+ " footer:",
+ " name: Footer",
+ " matrix:",
+ " layout: |",
+ " HHHHHHHH",
+ " HHHHHHHH",
+ " TTTTTTTT",
+ " TTTTTTTT",
+ " CCCCCCCC",
+ " CCCCCCCC",
+ " BBBBBBBB",
+ " BBBBBBBB",
+ " FFFFFFFF",
+ " FFFFFFFF",
+ "",
+ " mapping:",
+ " H: header",
+ " T: content_top",
+ " C: content",
+ " B: content_bottom",
+ " F: footer",
+ "",
+ " direct_publication: '%kernel.debug%'",
+ "",
+ " catch_exceptions:",
+ " not_found: [404] # render 404 page with \"not_found\" key (name generated: _page_internal_error_{key})",
+ " fatal: [500] # so you can use the same page for different http errors or specify specific page for each error",
+ ""
+ ],
+ "executable": false
+ },
+ "config/routes/sonata_page.yaml": {
+ "contents": [
+ "sonata_page_exceptions:",
+ " resource: '@SonataPageBundle/Resources/config/routing/exceptions.xml'",
+ " prefix: /",
+ ""
+ ],
+ "executable": false
+ },
+ "src/Entity/SonataPageBlock.php": {
+ "contents": [
+ "php bin/console doctrine:migrations:diff",
+ " 1. Generate a migration for Sonata Page Database bin/console doctrine:migrations:diff",
" ",
" If you use Doctrine Attribute Reference, You must change Sonata Entities generated in Entity folder.",
" You can check more details at https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/attributes-reference.html",
"",
" You can also use Rector to refactor, check more details at https://getrector.org/blog/how-to-upgrade-annotations-to-attributes",
" ",
- " 2. Apply the migration generated php bin/console doctrine:migrations:migrate --no-interaction",
+ " 2. Apply the migration generated bin/console doctrine:migrations:migrate --no-interaction",
" 3. Create your first site: bin/console sonata:page:create-site --enabled --name=localhost --locale=- --host=localhost --relativePath=- --enabledFrom=now --enabledTo=- --default",
" After you generate your site, You will see few commands to execute to have your Site ready.",
"",
@@ -244,7 +244,7 @@
"executable": false
}
},
- "ref": "9cce775649671f1bef3f8eb8e587f7216e7aa273"
+ "ref": "551c5070ffd41a2a76327a504b2d29da3da77559"
}
}
}
diff --git a/sonata-project.page-bundle.4.9.json b/sonata-project.page-bundle.4.9.json
new file mode 100644
index 00000000..b2abada6
--- /dev/null
+++ b/sonata-project.page-bundle.4.9.json
@@ -0,0 +1,220 @@
+{
+ "manifests": {
+ "sonata-project/page-bundle": {
+ "manifest": {
+ "bundles": {
+ "Sonata\\PageBundle\\SonataPageBundle": [
+ "all"
+ ]
+ },
+ "copy-from-recipe": {
+ "config/": "%CONFIG_DIR%/",
+ "src/": "%SRC_DIR%/"
+ },
+ "post-install-output": [
+ " * Your Page is almost ready:",
+ " 1. Generate a migration for Sonata Page Database php bin/console doctrine:migrations:diff",
+ " 2. Apply the migration generated php bin/console doctrine:migrations:migrate --no-interaction",
+ " 3. Create your first site: bin/console sonata:page:create-site --enabled --name=localhost --locale=- --host=localhost --relativePath=- --enabledFrom=now --enabledTo=- --default",
+ " Now you can create your first page at /admin",
+ "",
+ " * Documentation> https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/"
+ ]
+ },
+ "files": {
+ "config/packages/sonata_page.yaml": {
+ "contents": [
+ "sonata_block:",
+ " default_contexts: [sonata_page_bundle]",
+ "",
+ "sonata_admin:",
+ " assets:",
+ " extra_javascripts:",
+ " - bundles/sonatapage/app.js",
+ " extra_stylesheets:",
+ " - bundles/sonatapage/app.css",
+ "",
+ "# https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/reference/advanced_configuration/",
+ "sonata_page:",
+ " multisite: host",
+ " use_streamed_response: false",
+ "",
+ " router_auto_register:",
+ " enabled: true",
+ " priority: 150",
+ " ignore_route_patterns:",
+ " - ^(.*)admin(.*) # ignore admin route, ie route containing 'admin'",
+ " - ^_(.*) # ignore symfony routes",
+ " ignore_routes:",
+ " - sonata_page_cache_esi",
+ " - sonata_page_cache_ssi",
+ " - sonata_page_js_sync_cache",
+ " - sonata_page_js_async_cache",
+ " - sonata_cache_esi",
+ " - sonata_cache_ssi",
+ " - sonata_cache_js_async",
+ " - sonata_cache_js_sync",
+ " - sonata_cache_apc",
+ " ignore_uri_patterns:",
+ " - ^/admin\\/ # ignore admin route, ie route containing 'admin'",
+ "",
+ " #https://docs.sonata-project.org/projects/SonataPageBundle/en/4.x/reference/page_composer/",
+ " default_template: default",
+ " templates:",
+ " default:",
+ " path: '@SonataPage/layout.html.twig'",
+ " name: 'default'",
+ " containers:",
+ " header:",
+ " name: Header",
+ " content_top:",
+ " name: Top content",
+ " content:",
+ " name: Main content",
+ " content_bottom:",
+ " name: Bottom content",
+ " footer:",
+ " name: Footer",
+ " matrix:",
+ " layout: |",
+ " HHHHHHHH",
+ " HHHHHHHH",
+ " TTTTTTTT",
+ " TTTTTTTT",
+ " CCCCCCCC",
+ " CCCCCCCC",
+ " BBBBBBBB",
+ " BBBBBBBB",
+ " FFFFFFFF",
+ " FFFFFFFF",
+ "",
+ " mapping:",
+ " H: header",
+ " T: content_top",
+ " C: content",
+ " B: content_bottom",
+ " F: footer",
+ "",
+ " direct_publication: '%kernel.debug%'",
+ "",
+ " catch_exceptions:",
+ " not_found: [404] # render 404 page with \"not_found\" key (name generated: _page_internal_error_{key})",
+ " fatal: [500] # so you can use the same page for different http errors or specify specific page for each error",
+ ""
+ ],
+ "executable": false
+ },
+ "config/routes/sonata_page.yaml": {
+ "contents": [
+ "sonata_page_exceptions:",
+ " resource: '@SonataPageBundle/Resources/config/routing/exceptions.xml'",
+ " prefix: /",
+ ""
+ ],
+ "executable": false
+ },
+ "src/Entity/SonataPageBlock.php": {
+ "contents": [
+ "