survos / bootstrap-bundle
Integrates a bootstrap theme with many extras in a Symfony application
Installs: 3 162
Dependents: 3
Suggesters: 0
Security: 0
Stars: 3
Watchers: 3
Forks: 0
Open Issues: 0
Language:Twig
Type:symfony-bundle
Requires
- php: ^8.3
- knplabs/knp-menu-bundle: ^3.2
- survos/core-bundle: ^1.5
- survos/installer: ^1.4||^2.0
- symfony/config: ^6.4 || ^7.1
- symfony/dependency-injection: ^6.4 || ^7.1
- symfony/http-kernel: ^6.4 || ^7.1
- symfony/options-resolver: ^6.4 || ^7.1
- symfony/ux-icons: ^2.21
- symfony/ux-twig-component: ^2.8
- twig/intl-extra: ^3.8
- twig/string-extra: ^3.4
- twig/twig: ^3.4
Requires (Dev)
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.5
- survos/auth-bundle: ^1.5
- symfony/security-bundle: ^6.4 || ^7.1
- symfony/translation: ^6.4 || ^7.1
Suggests
- symfony/security-bundle: User authentication
Conflicts
- survos/api-grid-bundle: <1.2.57
- survos/auth-bundle: <1.2.57
- survos/barcode-bundle: <1.2.57
- survos/command-bundle: <1.2.57
- survos/crawler-bundle: <1.2.57
- survos/doc-bundle: <1.2.57
- survos/faker-bundle: <1.2.57
- survos/grid-bundle: <1.2.57
- survos/grid-group-bundle: <1.2.57
- survos/html-prettify-bundle: <1.2.57
- survos/import-bridge: <1.2.57
- survos/inspection-bundle: <1.2.57
- survos/location-bundle: <1.2.57
- survos/maker-bundle: <1.2.57
- survos/providence-bundle: <1.2.57
- survos/ruler-bundle: <1.2.57
- survos/stripe-product: <1.2.57
- survos/tree-bundle: <1.2.57
- survos/wiki-bundle: <1.2.57
- survos/workflow-helper-bundle: <1.2.57
- dev-master / 2.0.x-dev
- dev-main / 1.6.x-dev
- 1.5.442
- 1.5.441
- 1.5.440
- 1.5.439
- 1.5.438
- 1.5.437
- 1.5.436
- 1.5.435
- 1.5.434
- 1.5.433
- 1.5.432
- 1.5.431
- 1.5.430
- 1.5.429
- 1.5.428
- 1.5.427
- 1.5.426
- 1.5.425
- 1.5.424
- 1.5.423
- 1.5.422
- 1.5.421
- 1.5.420
- 1.5.419
- 1.5.418
- 1.5.417
- 1.5.416
- 1.5.415
- 1.5.414
- 1.5.413
- 1.5.412
- 1.5.411
- 1.5.410
- 1.5.409
- 1.5.408
- 1.5.407
- 1.5.406
- 1.5.405
- 1.5.404
- 1.5.403
- 1.5.402
- 1.5.401
- 1.5.400
- 1.5.399
- 1.5.398
- 1.5.397
- 1.5.396
- 1.5.395
- 1.5.394
- 1.5.393
- 1.5.392
- 1.5.391
- 1.5.390
- 1.5.389
- 1.5.388
- 1.5.387
- 1.5.386
- 1.5.385
- 1.5.384
- 1.5.383
- 1.5.382
- 1.5.381
- 1.5.380
- 1.5.379
- 1.5.378
- 1.5.377
- 1.5.376
- 1.5.375
- 1.5.374
- 1.5.373
- 1.5.372
- 1.5.371
- 1.5.370
- 1.5.369
- 1.5.368
- 1.5.367
- 1.5.366
- 1.5.365
- 1.5.364
- 1.5.363
- 1.5.362
- 1.5.361
- 1.5.360
- 1.5.359
- 1.5.358
- 1.5.357
- 1.5.356
- 1.5.355
- 1.5.354
- 1.5.353
- 1.5.352
- 1.5.351
- 1.5.350
- 1.5.349
- 1.5.345
- 1.5.344
- 1.5.343
- 1.5.342
- 1.5.341
- 1.5.340
- 1.5.339
- 1.5.338
- 1.5.337
- 1.5.336
- 1.5.335
- 1.5.334
- 1.5.333
- 1.5.332
- 1.5.331
- 1.5.330
- 1.5.329
- 1.5.328
- 1.5.327
- 1.5.326
- 1.5.325
- 1.5.324
- 1.5.323
- 1.5.322
- 1.5.321
- 1.5.320
- 1.5.319
- 1.5.318
- 1.5.317
- 1.5.316
- 1.5.315
- 1.5.314
- 1.5.313
- 1.5.312
- 1.5.311
- 1.5.310
- 1.5.309
- 1.5.308
- 1.5.307
- 1.5.306
- 1.5.305
- 1.5.304
- 1.5.303
- 1.5.302
- 1.5.301
- 1.5.300
- 1.5.299
- 1.5.298
- 1.5.297
- 1.5.296
- 1.5.295
- 1.5.294
- 1.5.293
- 1.5.292
- 1.5.291
- 1.5.290
- 1.5.289
- 1.5.288
- 1.5.287
- 1.5.286
- 1.5.285
- 1.5.284
- 1.5.283
- 1.5.282
- 1.5.281
- 1.5.280
- 1.5.279
- 1.5.278
- 1.5.277
- 1.5.276
- 1.5.275
- 1.5.274
- 1.5.273
- 1.5.272
- 1.5.271
- 1.5.270
- 1.5.269
- 1.5.268
- 1.5.267
- 1.5.266
- 1.5.265
- 1.5.264
- 1.5.263
- 1.5.262
- 1.5.261
- 1.5.260
- 1.5.259
- 1.5.258
- 1.5.257
- 1.5.256
- 1.5.255
- 1.5.254
- 1.5.253
- 1.5.252
- 1.5.251
- 1.5.250
- 1.5.249
- 1.5.248
- 1.5.247
- 1.5.246
- 1.5.245
- 1.5.244
- 1.5.243
- 1.5.242
- 1.5.241
- 1.5.240
- 1.5.239
- 1.5.238
- 1.5.237
- 1.5.236
- 1.5.235
- 1.5.234
- 1.5.233
- 1.5.232
- 1.5.231
- 1.5.230
- 1.5.229
- 1.5.228
- 1.5.227
- 1.5.226
- 1.5.225
- 1.5.224
- 1.5.223
- 1.5.222
- 1.5.221
- 1.5.220
- 1.5.219
- 1.5.218
- 1.5.217
- 1.5.216
- 1.5.215
- 1.5.214
- 1.5.213
- 1.5.212
- 1.5.211
- 1.5.210
- 1.5.209
- 1.5.208
- 1.5.207
- 1.5.206
- 1.5.205
- 1.5.204
- 1.5.203
- 1.5.202
- 1.5.201
- 1.5.200
- 1.5.199
- 1.5.198
- 1.5.197
- 1.5.196
- 1.5.195
- 1.5.194
- 1.5.193
- 1.5.192
- 1.5.191
- 1.5.190
- 1.5.189
- 1.5.188
- 1.5.187
- 1.5.186
- 1.5.185
- 1.5.184
- 1.5.183
- 1.5.182
- 1.5.181
- 1.5.180
- 1.5.179
- 1.5.178
- 1.5.177
- 1.5.176
- 1.5.175
- 1.5.174
- 1.5.173
- 1.5.172
- 1.5.171
- 1.5.170
- 1.5.169
- 1.5.168
- 1.5.167
- 1.5.166
- 1.5.165
- 1.5.164
- 1.5.163
- 1.5.162
- 1.5.161
- 1.5.160
- 1.5.159
- 1.5.158
- 1.5.157
- 1.5.156
- 1.5.155
- 1.5.154
- 1.5.153
- 1.5.152
- 1.5.151
- 1.5.150
- 1.5.149
- 1.5.148
- 1.5.147
- 1.5.146
- 1.5.145
- 1.5.144
- 1.5.143
- 1.5.142
- 1.5.141
- 1.5.140
- 1.5.139
- 1.5.138
- 1.5.137
- 1.5.136
- 1.5.135
- 1.5.134
- 1.5.133
- 1.5.132
- 1.5.131
- 1.5.130
- 1.5.129
- 1.5.128
- 1.5.127
- 1.5.126
- 1.5.125
- 1.5.124
- 1.5.123
- 1.5.122
- 1.5.121
- 1.5.120
- 1.5.119
- 1.5.118
- 1.5.117
- 1.5.116
- 1.5.115
- 1.5.114
- 1.5.113
- 1.5.112
- 1.5.111
- 1.5.110
- 1.5.109
- 1.5.108
- 1.5.107
- 1.5.106
- 1.5.105
- 1.5.104
- 1.5.103
- 1.5.102
- 1.5.101
- 1.5.100
- 1.5.99
- 1.5.98
- 1.5.97
- 1.5.96
- 1.5.95
- 1.5.94
- 1.5.93
- 1.5.92
- 1.5.91
- 1.5.90
- 1.5.89
- 1.5.88
- 1.5.87
- 1.5.86
- 1.5.85
- 1.5.84
- 1.5.83
- 1.5.82
- 1.5.81
- 1.5.80
- 1.5.79
- 1.5.78
- 1.5.77
- 1.5.76
- 1.5.75
- 1.5.74
- 1.5.73
- 1.5.72
- 1.5.71
- 1.5.70
- 1.5.69
- 1.5.68
- 1.5.67
- 1.5.66
- 1.5.65
- 1.5.64
- 1.5.63
- 1.5.62
- 1.5.61
- 1.5.60
- 1.5.59
- 1.5.58
- 1.5.57
- 1.5.56
- 1.5.55
- 1.5.54
- 1.5.53
- 1.5.52
- 1.5.51
- 1.5.50
- 1.5.49
- 1.5.48
- 1.5.47
- 1.5.46
- 1.5.45
- 1.5.44
- 1.5.43
- 1.5.42
- 1.5.41
- 1.5.40
- 1.5.39
- 1.5.38
- 1.5.37
- 1.5.36
- 1.5.35
- 1.5.34
- 1.5.33
- 1.5.32
- 1.5.31
- 1.5.30
- 1.5.29
- 1.5.28
- 1.5.27
- 1.5.26
- 1.5.25
- 1.5.24
- 1.5.23
- 1.5.22
- 1.5.21
- 1.5.20
- 1.5.19
- 1.5.18
- 1.5.17
- 1.5.16
- 1.5.15
- 1.5.14
- 1.5.13
- 1.5.12
- 1.5.11
- 1.5.10
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.103
- 1.4.102
- 1.4.101
- 1.4.100
- 1.4.99
- 1.4.98
- 1.4.97
- 1.4.96
- 1.4.95
- 1.4.94
- 1.4.93
- 1.4.92
- 1.4.91
- 1.4.90
- 1.4.89
- 1.4.88
- 1.4.87
- 1.4.86
- 1.4.85
- 1.4.84
- 1.4.83
- 1.4.82
- 1.4.81
- 1.4.80
- 1.4.79
- 1.4.78
- 1.4.77
- 1.4.76
- 1.4.75
- 1.4.74
- 1.4.73
- 1.4.72
- 1.4.71
- 1.4.70
- 1.4.69
- 1.4.68
- 1.4.67
- 1.4.66
- 1.4.65
- 1.4.64
- 1.4.63
- 1.4.62
- 1.4.61
- 1.4.60
- 1.4.59
- 1.4.58
- 1.4.57
- 1.4.56
- 1.4.55
- 1.4.54
- 1.4.53
- 1.4.44
- 1.4.43
- 1.4.42
- 1.4.41
- 1.4.40
- 1.4.39
- 1.4.38
- 1.4.37
- 1.4.36
- 1.4.35
- 1.4.34
- 1.4.33
- 1.4.32
- 1.4.31
- 1.4.30
- 1.4.29
- 1.4.28
- 1.4.27
- 1.4.26
- 1.4.25
- 1.4.24
- 1.4.23
- 1.4.22
- 1.4.21
- 1.4.20
- 1.4.19
- 1.4.18
- 1.4.17
- 1.4.16
- 1.4.15
- 1.4.14
- 1.4.13
- 1.4.12
- 1.4.11
- 1.4.10
- 1.4.9
- 1.4.8
- 1.4.7
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.14
- 1.3.13
- 1.3.12
- 1.3.11
- 1.3.10
- 1.3.9
- 1.3.8
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.2.56
- 1.2.55
- 1.2.54
- 1.2.53
- 1.2.52
- 1.2.51
- 1.2.50
- 1.2.49
- 1.2.48
- 1.2.47
- 1.2.46
- 1.2.45
- 1.2.44
- 1.2.43
- 1.2.42
- 1.2.41
- 1.2.40
- 1.2.39
- 1.2.38
- 1.2.37
- 1.2.36
- 1.2.34
- 1.2.33
- 1.2.32
- 1.2.31
- 1.2.30
- 1.2.29
- 1.2.28
- 1.2.27
- 1.2.26
- 1.2.25
- 1.2.24
- 1.2.23
- 1.2.22
- 1.2.21
- 1.2.17
- 1.2.16
- 1.2.15
- 1.2.14
- 1.2.13
- 1.2.12
- 1.2.11
- 1.2.10
- 1.2.9
- 1.2.8
This package is auto-updated.
Last update: 2024-12-18 12:31:07 UTC
README
A common bootstrap layout, including menus and several components.
This bundle leverages several Symfony components, and as such loads several dependencies, and is a fairly opinionated bundles. Adhering to the coding suggestions offers several benefits.
Layout
All of the themes are based on Bootstrap 5.3, and tabler is the recommended one. The base layout has various menus: navbar, footer, page_header
Menus
The menu system is based on event listeners. While these are a bit complicated at first, benefits include:
- Context-specific menus (e.g. a separate menu for each entity, e.g. a Project menu, with its own navbar and footer.
- Automatic security -- does not render a menu item if IsGranted attribute blocks the user
- Automatic translation: uses the controller name (rather than route name) as the default label.
bin/console survos:make:menu App
#[AsEventListener(event: KnpMenuEvent::NAVBAR_MENU2, priority: 50)] public function navarButtonsMenu(KnpMenuEvent $event): void { $menu = $event->getMenu(); $this->add($menu, 'app_homepage'); $this->add($menu, 'event_index'); } #[AsEventListener(event: KnpMenuEvent::NAVBAR_MENU)] public function navbarMenu(KnpMenuEvent $event): void { if (!$this->supports($event)) { return; } }
Pass context-specific menu data by first configuring the allowable fields in menu_options of survos_bootstrap.yaml
survos_bootstrap: routes: login: app_login logout: app_logout register: app_register homepage: app_homepage menu_options: entityClass: null project: null frontPage: false showAppMenu: false
{% block footer %} <twig:menu :type="FOOTER_MENU" :caller="_self" :options="{owner: owner, entityClass: ownerClass, project:project|default(null)}" > </twig:menu>
Entity Routes
Entity routes can be generated in the menu component without having to remember the parameters.
if ($this->isGranted('ROLE_SUPER_ADMIN')) { $subMenu = $this->addSubmenu($menu, 'super_admin_index'); $this->add($subMenu, 'owner_references', $owner); $this->add($subMenu, 'owner_dump', $owner, external: true);
the $owner class must implement getUniqueParameters(), which is used by the getRp() method. At the moment, this requires implementing the listener which is clumbsy :-(
)
symfony new my-app --webapp && cd my-app composer req survos/bootstrap-bundle composer req survos/maker-bundle --dev bin/console importmap:require @tabler/core echo "import '@tabler/core'; import '@tabler/core/dist/css/tabler.min.css'; " >> assets/app.js @todo: {% extends "@SurvosBootstrap/%s/base.html.twig"|format(theme_option('theme')) %} bin/console make:controller App sed -i "s|'/app'|'/'|" src/Controller/AppController.php # the landing page controller cat > templates/app/index.html.twig <<'END' {% extends 'base.html.twig' %} {% block body %} <twig:alert message="hello" dismissible="true"> <twig:block name="alert_message"> I can override the alert_message block and access the {{ message }} too! </twig:block> </twig:alert> {% endblock %} END
@todo:
- make:create-user-command
A simple template with a navbar and login for Symfony, using Bootstrap 5
composer req survos/bootstrap-bundle composer req survos/maker-bundle --dev
To set default values (@todo: install recipe)
# config/packages/bootstrap.yaml bootstrap: widthFactor: 3 height: 120 foregroundColor: 'purple'
symfony new BootstrapDemo --webapp bin/console make:controller AppController composer req survos/bootstrap-bundle echo "{{ 'test'|bootstrap }} or {{ bootstrap('test', 2, 80, 'red') }} " >> templates/app/index.html.twig symfony server:start -d
Knp Menu Bundle
symfony new menu7 --webapp --version=next && cd menu7 composer config minimum-stability dev composer config prefer-stable false composer config extra.symfony.allow-contrib true #sed -i 's/"6.4.*"/"^7.0"/' composer.json composer update #composer config repositories.knp_menu_bundle '{"type": "vcs", "url": "git@github.com:tacman/KnpMenuBundle.git"}' composer require knplabs/knp-menu-bundle composer req symfony/asset-mapper bin/console make:controller -i Menu cat > templates/menu.html.twig <<END {% extends 'base.html.twig' %} {% block body %} {{ knp_menu_render('App:Builder:mainMenu') }} {% endblock %} END cat > src/Menu/Builder.php << 'END' namespace App\Menu; use App\Entity\Blog; use Knp\Menu\FactoryInterface; use Knp\Menu\ItemInterface; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerAwareTrait; final class Builder { public function mainMenu(FactoryInterface $factory, array $options): ItemInterface { $menu = $factory->createItem('root'); $menu->addChild('Home', ['route' => 'app_app']); return $menu; } } END symfony server:start -d symfony open:local --path=/menu
twig bug
symfony new test --webapp --version=7.0 && cd test composer require symfony/ux-twig-component symfony/asset-mapper composer req survos/bootstrap-bundle composer req survos/api-grid-bundle composer req survos/crawler-bundle composer req survos/command-bundle composer req survos/barcode-bundle echo "import 'bootstrap/dist/css/bootstrap.min.css'" >> assets/app.js bin/console make:controller App sed -i "s|'/app'|'/'|" src/Controller/AppController.php # the landing page controller cat > templates/app/index.html.twig <<'END' {% extends 'base.html.twig' %} {% block body %} <twig:alert message="hello" dismissible="true"> <twig:block name="alert_message"> I can override the alert_message block and access the {{ message }} too! </twig:block> </twig:alert> {% endblock %} END symfony server:start -d symfony open:local --path=/app cd ../ux ./link ../bug cd ../bug symfony open:local --path=/app