diff --git a/docs/reference/installation.rst b/docs/reference/installation.rst index d68e70ef7..a119afb44 100644 --- a/docs/reference/installation.rst +++ b/docs/reference/installation.rst @@ -1,279 +1,36 @@ -.. index:: - single: Installation - single: Configuration - Installation ============ -Prerequisites -------------- - -There are some Sonata dependencies that need to be installed and configured beforehand. - -Required dependencies: - -* `SonataAdminBundle `_ -* `SonataBlockBundle_ `_ -* `SonataSeoBundle_ `_ - -And the persistence bundle (currently, not all the implementations of the Sonata persistence bundles are available): +.. code-block:: bash -* `SonataDoctrineOrmAdminBundle `_ - -Follow also their configuration step; you will find everything you need in -their own installation chapter. + composer require sonata-project/page-bundle -W .. note:: - If a dependency is already installed somewhere in your project or in - another dependency, you won't need to install it again. - -Enable the Bundle ------------------ - -Add ``SonataPageBundle`` via composer:: - - composer require sonata-project/page-bundle - -.. note:: - - This will install the SymfonyCmfRoutingBundle_, too. - -Next, be sure to enable the bundles in your ``config/bundles.php`` file if they -are not already enabled:: - - // config/bundles.php - - return [ - // ... - Sonata\PageBundle\SonataPageBundle::class => ['all' => true], - ]; - -Configuration -============= - -CMF Routing Configuration -------------------------- - -``sonata.page.router`` service must be added to the index of ``cmf_routing.router`` chain router. - -Configure ``symfony-cmf/routing-bundle``: - -.. code-block:: yaml - - # config/packages/cmf_routing_bundle.yaml - - cmf_routing: - chain: - routers_by_id: - # enable the DynamicRouter with high priority to allow overwriting configured routes with content - #cmf_routing.dynamic_router: 200 - # enable the symfony default router with a lower priority - sonata.page.router: 150 - router.default: 100 - -Or register ``sonata.page.router`` automatically: - -.. code-block:: yaml - - # config/packages/sonata_page.yaml - - sonata_page: - router_auto_register: - enabled: true - priority: 150 - -SonataPageBundle Configuration ------------------------------- - -.. code-block:: yaml - - # config/packages/sonata_page.yaml - - sonata_page: - multisite: host - use_streamed_response: true # set the value to false in debug mode or if the reverse proxy does not handle streamed response - ignore_route_patterns: - - ^(.*)admin(.*) # ignore admin route, ie route containing 'admin' - - ^_(.*) # ignore symfony routes - - class: - page: App\Entity\SonataPagePage - snapshot: App\Entity\SonataPageSnapshot - block: App\Entity\SonataPageBlock - site: App\Entity\SonataPageSite - - ignore_uri_patterns: - - ^/admin\/ # ignore admin route, ie route containing 'admin' - - page_defaults: - homepage: {decorate: false} # disable decoration for homepage, key - is a page route - - default_template: default # template key from templates section, used as default for pages - templates: - default: { path: '@SonataPage/layout.html.twig', name: 'default' } - 2columns: { path: '@SonataPage/2columns_layout.html.twig', name: '2 columns layout' } - - direct_publication: false # or %kernel.debug% if you want to publish in dev mode (but not in prod) - - # manage the http errors - 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 - -SonataAdminBundle Configuration -------------------------------- - -.. code-block:: yaml - - # config/packages/sonata_admin.yaml - - sonata_admin: - assets: - extra_javascripts: - - bundles/sonatapage/app.js - extra_stylesheets: - - bundles/sonatapage/app.css - -SonataBlockBundle Configuration -------------------------------- - -.. code-block:: yaml - - # config/packages/sonata_block.yaml - - sonata_block: - default_contexts: [sonata_page_bundle] - -Security Configuration ----------------------- - -.. code-block:: yaml - - # config/packages/security.yaml - - security: - role_hierarchy: - ROLE_ADMIN: ROLE_USER - ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, SONATA] - - SONATA: - - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are not using acl then this line must be uncommented - - ROLE_SONATA_PAGE_ADMIN_BLOCK_EDIT - -If you have decided to customize your logout management (in particular -if you have set ``invalidate_session`` to false), you might want to add -this logout handler: - -.. code-block:: yaml - - # config/packages/security.yaml - - security: - firewalls: - main: # replace with your firewall name - logout: - handlers: ['sonata.page.cms_manager_selector'] - -Routing Configuration ---------------------- - -.. code-block:: yaml - - # config/routes.yaml - - sonata_page_exceptions: - resource: '@SonataPageBundle/Resources/config/routing/exceptions.xml' - prefix: / - -Doctrine ORM Configuration --------------------------- - -And these in the config mapping definition (or enable auto_mapping):: - - # config/packages/doctrine.yaml - - doctrine: - orm: - entity_managers: - default: - mappings: - SonataPageBundle: ~ - -And then create the corresponding entities, ``src/Entity/SonataPageBlock``:: - - // src/Entity/SonataPageBlock.php - - use Doctrine\DBAL\Types\Types; - use Doctrine\ORM\Mapping as ORM; - use Sonata\PageBundle\Entity\BaseBlock; - - #[ORM\Entity] - #[ORM\Table(name: 'page__block')] - class SonataPageBlock extends BaseBlock - { - #[ORM\Id] - #[ORM\Column(type: Types::INTEGER)] - #[ORM\GeneratedValue] - protected $id; - } - -``src/Entity/SonataPagePage``:: - - // src/Entity/SonataPagePage.php - - use Doctrine\DBAL\Types\Types; - use Doctrine\ORM\Mapping as ORM; - use Sonata\PageBundle\Entity\BasePage; + It will ask to execute few symfony recipes, type ``a`` to install all. - #[ORM\Entity] - #[ORM\Table(name: 'page__page')] - class SonataPagePage extends BasePage - { - #[ORM\Id] - #[ORM\Column(type: Types::INTEGER)] - #[ORM\GeneratedValue] - protected $id; - } -``src/Entity/SonataPageSite``:: +Post install +------------ +Generate a migration - // src/Entity/SonataPageSite.php +.. code-block:: bash - use Doctrine\DBAL\Types\Types; - use Doctrine\ORM\Mapping as ORM; - use Sonata\PageBundle\Entity\BaseSite; + bin/console doctrine:migrations:diff - #[ORM\Entity] - #[ORM\Table(name: 'page__site')] - class SonataPageSite extends BaseSite - { - #[ORM\Id] - #[ORM\Column(type: Types::INTEGER)] - #[ORM\GeneratedValue] - protected $id; - } +Execute migration -and ``src/Entity/SonataPageSnapshot``:: +.. code-block:: bash - // src/Entity/SonataPageSnapshot.php + bin/console doctrine:migrations:migrate --no-interaction - use Doctrine\ORM\Mapping as ORM; - use Sonata\PageBundle\Entity\BaseSnapshot; +Create your first site - #[ORM\Entity] - #[ORM\Table(name: 'page__snapshot')] - class SonataPageSnapshot extends BaseSnapshot - { - #[ORM\Id] - #[ORM\Column(type: Types::INTEGER)] - #[ORM\GeneratedValue] - protected $id; - } +.. code-block:: bash -The only thing left is to update your schema:: + bin/console sonata:page:create-site --enabled --name=localhost --locale=- --host=localhost --relativePath=- --enabledFrom=now --enabledTo=- --default - bin/console doctrine:schema:update --force +Create your first page at ``/admin/app/sonatapagepage/create`` Next Steps ----------