Add some tools and resources to a Symfony5 application

Installs: 552

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 2

Forks: 0

Open Issues: 0



1.7.2 2020-01-10 19:35 UTC

This package is auto-updated.

Last update: 2021-10-18 16:10:10 UTC



Add new Bundle directory convention consistent with standard skeletons:

└── MyBundle/
    ├── config/
    ├── public/
    ├── src/
    │   └── MyBundle.php
    ├── templates/
    └── translations/

    class MyBundle extends Bundle
        public function getPath(): string
            return \dirname(__DIR__);

A moderately-opinionated bundle that provides a quick way to get up and running with Symfony, using best practices.

Besides the Symfony web skeleton, this bundle also requires:

  • Javascript: jquery, bootstrap
  • Symfony: KnpMenu, WebpackEncore

and recommends:

  • Javascript: fontawesome
  • Symfony: EasyAdminBundle


This bundle was created originally to isolate issues with other bundles and to get data on a website as quickly and painlessly as possible.


  • composer
  • PHP 7.1+
  • yarn
  • Symfony CLI (for running a local server, creating project, etc.)

Create github Project

on with no files (no README or license), clone it to some directory and go there.

 REPO=xml-serializer-demo && git clone$REPO.git && cd $REPO 
  • Create the Symfony Skeleton WITHOUT a git repo, then ADD the repo.

    mv .git .. && symfony new --full . --no-git && mv ../.git .

Create the project on heroku, after logging in

heroku create $REPO
 bin/console make:user User --is-entity --identity-property-name=email --with-password -n

# composer config extra.symfony.allow-contrib true

# interaction is required for the next commands, so if you're cutting and pasting, stop here!

# use the defaults (App\Entity\User)

Create LoginFormAuthenticator

bin/console make:auth

   1 # Login Form Authenticator
   <return> # SecurityController
   <return> # /logout
# Optional, since SurvosBaseBundle has this already, formatted for mobile
bin/console make:registration-form

# Now install the Landing (SurvosBase?) bundle
composer config minimum-stability dev
composer req survos/landing-bundle

    composer config repositories.adminlte '{"type": "vcs", "url": ""}'

    composer config '{"type": "vcs", "url": ""}'

# local dev: create a symlink

composer config repositories.survoslanding '{"type": "path", "url": "../Survos/LandingBundle"}'
composer config repositories.geonames '{"type": "path", "url": "../Survos/geonames-bundle"}'
composer config repositories.phpspreadsheet '{"type": "path", "url": "../Survos/phpspreadsheet-bundle"}'

composer config repositories.multisearch '{"type": "vcs", "url": ""}'

composer config repositories.captcha '{"type": "vcs", "url": ""}'

composer config repositories.git-survoslanding '{"type": "vcs", "url": ""}'

composer config repositories.git-geonames '{"type": "vcs", "url": ""}'

composer config repositories.flowdemo '{"type": "path", "url": "../Survos/../CraueFormFlowDemoBundle"}'

composer config repositories.social_post_bundle '{"type": "path", "url": "../Survos/social-post-bundle"}'

composer config repositories.social_post_bundle '{"type": "vcs", "url": ""}'

# this is needed because it creates MAILER_DSN, which isn't created otherwise
# composer req mail
composer req knplabs/knp-menu-bundle:"^3.0@dev"

composer req survos/landing-bundle:"*@dev"
phpstorm .env


composer req survos/landing-bundle

# creates survos_landing.yaml (a recipe would be nicer!)    
bin/console survos:init

# edit .env and set MAILER_URL

Ugh, still doesn't work, needs a landing menu

# introspection, creates menus, looks for entities, easyadmin, etc.
bin/console survos:configure
# symfony run -d yarn encore dev --watch

Integrating Facebook and other OAuth

Go to


composer require league/oauth2-facebook

The create an app and enable login:

Need a config script that asks for the ID and sets it in .env.local (or Heroku, etc.)

Install and Configure UserBundle (optional)

See [docs/recommended_bundles]

If developing LandingBundle

composer config repositories.survoslanding '{"type": "path", "url": "../Survos/LandingBundle"}'
composer req survos/landing-bundle:"*@dev"

Normal installation

Install the bundle, then go through the setup to add and configure the tools.

composer req survos/landing-bundle

yarn install 

xterm -e "yarn run encore dev-server" &

composer req "kevinpapst/adminlte-bundle"
bin/console make:subscriber KnpMenuSubscriber "KevinPapst\AdminLTEBundle\Event\KnpMenuEvent"

bin/console survos:init

bin/console survos:config --no-interaction
bin/console doctrine:schema:update --force


First time setup, downloads jquery, bootstrap, etc. Also modifies some yaml files, and creates the first menu.

# config/packages/admin_lte.yaml
        enable: true

        adminlte_welcome: app_homepage
        adminlte_login: app_login
        adminlte_profile: app_profile

@todo: Generate this Controller and templates?

# config/routes/survos_landing.yaml
survos_landing: {path: /, controller: 'Survos\LandingBundle\Controller\LandingController::landing'}
# app_homepage: {path: /, controller: 'Survos\LandingBundle\Controller\LandingController::landing'}
app_logo: {path: /logo, controller: 'Survos\LandingBundle\Controller\LandingController::logo'}
app_profile: {path: /profile, controller: 'Survos\LandingBundle\Controller\LandingController::profile'}
# profile: {path: /profile, controller: 'Survos\LandingBundle\Controller\LandingController::profile'}
# logout: {path: /logout, controller: 'Survos\LandingBundle\Controller\LandingController::logout'}
# required if app_profile is used, since you can change the password from the profile
app_change_password: {path: /change-password, controller: 'Survos\LandingBundle\Controller\LandingController::changePassword'}

{% extends '@AdminLTE/layout/default-layout.html.twig' %} {% block page_content %} {{ block('body') }} {% endblock %}

{% block logo_mini %}KPA{% endblock %} {% block logo_large 'KPA Admin' %}

{% block page_title 'KPA Admin' %} {% block page_subtitle 'Songs and Music!' %}

Now install some bundles!

See the details at [Recommended Bundles](docs/

If you chosen to integrate the userbundle, update the schema and add an admin

bin/console doctrine:schema:update --force

symfony server:start --no-tls

When finished, the application will have a basic landing page with top navigation, optionally including login/registration pages. Logged in users with ROLE_ADMIN will also (optionally) have links to easyadmin and api-platform.

Api Platform

@todo: put this in a survos:setup command.

  • Expose the API routes (for jsRoutingBundle), and
# config/routes/api_platform.yaml
    resource: .
    type: api_platform
    prefix: /api
        expose: true

Create resources.yaml to store the configuration

# api/config/api_platform/resources.yaml
App\Entity\User: ~
  shortName: 'Location'                   # optional
  description: 'A place within a building where inventory item is physically located.' # optional
  attributes:                          # optional
    pagination_items_per_page: 30   # optional
      groups: ['jstree']
      groups: ['jstree']

Add the resources.yaml directory to the mapping paths

# config/packages/api_platform.yaml
            - '%kernel.project_dir%/src/Entity'
            - '%kernel.project_dir%/config/api_platform' # yaml or xml directory configuration]
        json: ['application/merge-patch+json']
        versions: [3]

Configure the serializer (may need to create the directory)

# config/serializer/serialization.yaml
      groups: ['Default']
      groups: ['Default']

      groups: ['Default']

Customizing the bundle

Deploy to heroku

heroku create $projectName

echo "web:  vendor/bin/heroku-php-nginx -C heroku-nginx.conf  -F fpm_custom.conf public/" > Procfile

heroku buildpacks:add heroku/nodejs
heroku buildpacks:add --index 2 heroku/nodejs

composer config --unset repositories.survoslanding && composer update
git commit -m "unset survoslanding" . && git push heroku master bin/console survos:setup-heroku