├── .env.dist ├── .gitignore ├── README.md ├── assets ├── .gitignore ├── css │ └── app.css └── js │ ├── Components │ └── ItemCard.js │ └── app.js ├── bin └── console ├── composer.json ├── composer.lock ├── config ├── bundles.php ├── packages │ ├── dev │ │ └── routing.yaml │ ├── framework.yaml │ ├── routing.yaml │ ├── test │ │ └── framework.yaml │ └── twig.yaml ├── routes.yaml ├── routes │ ├── annotations.yaml │ └── dev │ │ └── twig.yaml └── services.yaml ├── final-result.png ├── package.json ├── public └── index.php ├── src ├── Controller │ ├── .gitignore │ └── DefaultController.php └── Kernel.php ├── symfony.lock ├── templates ├── Default │ └── index.html.twig └── base.html.twig ├── webpack.config.js └── yarn.lock /.env.dist: -------------------------------------------------------------------------------- 1 | # This file is a "template" of which env vars need to be defined for your application 2 | # Copy this file to .env file for development, create environment variables when deploying to production 3 | # https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration 4 | 5 | ###> symfony/framework-bundle ### 6 | APP_ENV=dev 7 | APP_SECRET=f74bb4c11edf0f83fb70918dd27ff8dd 8 | #TRUSTED_PROXIES=127.0.0.1,127.0.0.2 9 | #TRUSTED_HOSTS=localhost,example.com 10 | ###< symfony/framework-bundle ### 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ###> symfony/framework-bundle ### 2 | .env 3 | /public/bundles/ 4 | /var/ 5 | /vendor/ 6 | ###< symfony/framework-bundle ### 7 | 8 | ###> symfony/webpack-encore-pack ### 9 | /node_modules/ 10 | /public/build/ 11 | ###< symfony/webpack-encore-pack ### 12 | 13 | ###> symfony/web-server-bundle ### 14 | .web-server-pid 15 | ###< symfony/web-server-bundle ### 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React starter repo with Symfony 4 and Webpack Encore 2 | 3 | This is a Symfony 4 starter repo with React, developed for https://www.modernjsforphpdevs.com/react-symfony-4-starter-repo/ 4 | 5 | Requirements 6 | ------------ 7 | 8 | * PHP 7.1.3 or higher 9 | * [Node.js](https://nodejs.org/en/download/) 6.0.0 or higher 10 | * and the [usual Symfony application requirements][1]. 11 | 12 | Installation 13 | ------------ 14 | 15 | Install the composer dependencies: 16 | 17 | ```bash 18 | $ composer install 19 | ``` 20 | 21 | Then install the node dependencies: 22 | 23 | ```bash 24 | $ yarn 25 | 26 | # OR 27 | 28 | $ npm install 29 | ``` 30 | 31 | Usage 32 | ----- 33 | 34 | Build the assets with Webpack Encore 35 | 36 | ```bash 37 | $ yarn run encore dev 38 | # yarn run encore dev --watch to automatically rebuild on every change 39 | ``` 40 | 41 | And start the built-in webserver 42 | 43 | ```bash 44 | $ ./bin/console server:start 45 | # stop it again with ./bin/console server:stop 46 | ``` 47 | 48 | Navigate to http://localhost:8000 to see the final result, which should look something like this: 49 | 50 | ![The final result is three Material Design cards with an author, title and content](./final-result.png "The final result is three Material Design cards with an author, title and content") 51 | 52 | [1]: https://symfony.com/doc/current/reference/requirements.html -------------------------------------------------------------------------------- /assets/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zorfling/react-symfony-4-starter/e56c50709e8a12c0a7824c783de1f0ff8c98eb9a/assets/.gitignore -------------------------------------------------------------------------------- /assets/css/app.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: Arial, Helvetica, sans-serif; 3 | } 4 | 5 | .footer { 6 | display: flex; 7 | justify-content: center; 8 | } 9 | -------------------------------------------------------------------------------- /assets/js/Components/ItemCard.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Card, CardHeader, CardTitle, CardText } from 'material-ui/Card'; 3 | 4 | const ItemCard = ({ author, avatarUrl, title, subtitle, style, children }) => ( 5 | 6 | 7 | 8 | {children} 9 | 10 | ); 11 | 12 | export default ItemCard; 13 | -------------------------------------------------------------------------------- /assets/js/app.js: -------------------------------------------------------------------------------- 1 | import '../css/app.css'; 2 | import React from 'react'; 3 | import ReactDOM from 'react-dom'; 4 | import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; 5 | 6 | import ItemCard from './Components/ItemCard'; 7 | 8 | class App extends React.Component { 9 | constructor() { 10 | super(); 11 | 12 | this.state = { 13 | entries: [] 14 | }; 15 | } 16 | 17 | componentDidMount() { 18 | fetch('/data') 19 | .then(response => response.json()) 20 | .then(entries => { 21 | this.setState({ 22 | entries 23 | }); 24 | }); 25 | } 26 | 27 | render() { 28 | return ( 29 | 30 |
31 | {this.state.entries.map( 32 | ({ id, author, avatarUrl, title, description }) => ( 33 | 40 | {description} 41 | 42 | ) 43 | )} 44 |
45 |
46 | ); 47 | } 48 | } 49 | 50 | ReactDOM.render(, document.getElementById('root')); 51 | -------------------------------------------------------------------------------- /bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | load(__DIR__.'/../.env'); 23 | } 24 | 25 | $input = new ArgvInput(); 26 | $env = $input->getParameterOption(['--env', '-e'], $_SERVER['APP_ENV'] ?? 'dev'); 27 | $debug = ($_SERVER['APP_DEBUG'] ?? ('prod' !== $env)) && !$input->hasParameterOption(['--no-debug', '']); 28 | 29 | if ($debug) { 30 | umask(0000); 31 | 32 | if (class_exists(Debug::class)) { 33 | Debug::enable(); 34 | } 35 | } 36 | 37 | $kernel = new Kernel($env, $debug); 38 | $application = new Application($kernel); 39 | $application->run($input); 40 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "project", 3 | "license": "proprietary", 4 | "require": { 5 | "php": "^7.1.3", 6 | "ext-iconv": "*", 7 | "sensio/framework-extra-bundle": "^5.1", 8 | "symfony/asset": "^4.0", 9 | "symfony/console": "^4.0", 10 | "symfony/flex": "^1.0", 11 | "symfony/framework-bundle": "^4.0", 12 | "symfony/lts": "^4@dev", 13 | "symfony/twig-bundle": "^4.0", 14 | "symfony/webpack-encore-pack": "^1.0", 15 | "symfony/yaml": "^4.0" 16 | }, 17 | "require-dev": { 18 | "symfony/dotenv": "^4.0", 19 | "symfony/web-server-bundle": "^4.0" 20 | }, 21 | "config": { 22 | "preferred-install": { 23 | "*": "dist" 24 | }, 25 | "sort-packages": true 26 | }, 27 | "autoload": { 28 | "psr-4": { 29 | "App\\": "src/" 30 | } 31 | }, 32 | "autoload-dev": { 33 | "psr-4": { 34 | "App\\Tests\\": "tests/" 35 | } 36 | }, 37 | "replace": { 38 | "symfony/polyfill-iconv": "*", 39 | "symfony/polyfill-php71": "*", 40 | "symfony/polyfill-php70": "*", 41 | "symfony/polyfill-php56": "*" 42 | }, 43 | "scripts": { 44 | "auto-scripts": { 45 | "cache:clear": "symfony-cmd", 46 | "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd" 47 | }, 48 | "post-install-cmd": [ 49 | "@auto-scripts" 50 | ], 51 | "post-update-cmd": [ 52 | "@auto-scripts" 53 | ] 54 | }, 55 | "conflict": { 56 | "symfony/symfony": "*" 57 | }, 58 | "extra": { 59 | "symfony": { 60 | "id": "01C1SRVACKRCQK55Z6B5EEQ1VV", 61 | "allow-contrib": false 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "b0a77f67dbc831014b79dc5a3f0bca0f", 8 | "packages": [ 9 | { 10 | "name": "doctrine/annotations", 11 | "version": "v1.6.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/annotations.git", 15 | "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", 20 | "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "doctrine/lexer": "1.*", 25 | "php": "^7.1" 26 | }, 27 | "require-dev": { 28 | "doctrine/cache": "1.*", 29 | "phpunit/phpunit": "^6.4" 30 | }, 31 | "type": "library", 32 | "extra": { 33 | "branch-alias": { 34 | "dev-master": "1.6.x-dev" 35 | } 36 | }, 37 | "autoload": { 38 | "psr-4": { 39 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Roman Borschel", 49 | "email": "roman@code-factory.org" 50 | }, 51 | { 52 | "name": "Benjamin Eberlei", 53 | "email": "kontakt@beberlei.de" 54 | }, 55 | { 56 | "name": "Guilherme Blanco", 57 | "email": "guilhermeblanco@gmail.com" 58 | }, 59 | { 60 | "name": "Jonathan Wage", 61 | "email": "jonwage@gmail.com" 62 | }, 63 | { 64 | "name": "Johannes Schmitt", 65 | "email": "schmittjoh@gmail.com" 66 | } 67 | ], 68 | "description": "Docblock Annotations Parser", 69 | "homepage": "http://www.doctrine-project.org", 70 | "keywords": [ 71 | "annotations", 72 | "docblock", 73 | "parser" 74 | ], 75 | "time": "2017-12-06T07:11:42+00:00" 76 | }, 77 | { 78 | "name": "doctrine/cache", 79 | "version": "v1.7.1", 80 | "source": { 81 | "type": "git", 82 | "url": "https://github.com/doctrine/cache.git", 83 | "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a" 84 | }, 85 | "dist": { 86 | "type": "zip", 87 | "url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a", 88 | "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a", 89 | "shasum": "" 90 | }, 91 | "require": { 92 | "php": "~7.1" 93 | }, 94 | "conflict": { 95 | "doctrine/common": ">2.2,<2.4" 96 | }, 97 | "require-dev": { 98 | "alcaeus/mongo-php-adapter": "^1.1", 99 | "mongodb/mongodb": "^1.1", 100 | "phpunit/phpunit": "^5.7", 101 | "predis/predis": "~1.0" 102 | }, 103 | "suggest": { 104 | "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" 105 | }, 106 | "type": "library", 107 | "extra": { 108 | "branch-alias": { 109 | "dev-master": "1.7.x-dev" 110 | } 111 | }, 112 | "autoload": { 113 | "psr-4": { 114 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" 115 | } 116 | }, 117 | "notification-url": "https://packagist.org/downloads/", 118 | "license": [ 119 | "MIT" 120 | ], 121 | "authors": [ 122 | { 123 | "name": "Roman Borschel", 124 | "email": "roman@code-factory.org" 125 | }, 126 | { 127 | "name": "Benjamin Eberlei", 128 | "email": "kontakt@beberlei.de" 129 | }, 130 | { 131 | "name": "Guilherme Blanco", 132 | "email": "guilhermeblanco@gmail.com" 133 | }, 134 | { 135 | "name": "Jonathan Wage", 136 | "email": "jonwage@gmail.com" 137 | }, 138 | { 139 | "name": "Johannes Schmitt", 140 | "email": "schmittjoh@gmail.com" 141 | } 142 | ], 143 | "description": "Caching library offering an object-oriented API for many cache backends", 144 | "homepage": "http://www.doctrine-project.org", 145 | "keywords": [ 146 | "cache", 147 | "caching" 148 | ], 149 | "time": "2017-08-25T07:02:50+00:00" 150 | }, 151 | { 152 | "name": "doctrine/collections", 153 | "version": "v1.5.0", 154 | "source": { 155 | "type": "git", 156 | "url": "https://github.com/doctrine/collections.git", 157 | "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" 158 | }, 159 | "dist": { 160 | "type": "zip", 161 | "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", 162 | "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", 163 | "shasum": "" 164 | }, 165 | "require": { 166 | "php": "^7.1" 167 | }, 168 | "require-dev": { 169 | "doctrine/coding-standard": "~0.1@dev", 170 | "phpunit/phpunit": "^5.7" 171 | }, 172 | "type": "library", 173 | "extra": { 174 | "branch-alias": { 175 | "dev-master": "1.3.x-dev" 176 | } 177 | }, 178 | "autoload": { 179 | "psr-0": { 180 | "Doctrine\\Common\\Collections\\": "lib/" 181 | } 182 | }, 183 | "notification-url": "https://packagist.org/downloads/", 184 | "license": [ 185 | "MIT" 186 | ], 187 | "authors": [ 188 | { 189 | "name": "Roman Borschel", 190 | "email": "roman@code-factory.org" 191 | }, 192 | { 193 | "name": "Benjamin Eberlei", 194 | "email": "kontakt@beberlei.de" 195 | }, 196 | { 197 | "name": "Guilherme Blanco", 198 | "email": "guilhermeblanco@gmail.com" 199 | }, 200 | { 201 | "name": "Jonathan Wage", 202 | "email": "jonwage@gmail.com" 203 | }, 204 | { 205 | "name": "Johannes Schmitt", 206 | "email": "schmittjoh@gmail.com" 207 | } 208 | ], 209 | "description": "Collections Abstraction library", 210 | "homepage": "http://www.doctrine-project.org", 211 | "keywords": [ 212 | "array", 213 | "collections", 214 | "iterator" 215 | ], 216 | "time": "2017-07-22T10:37:32+00:00" 217 | }, 218 | { 219 | "name": "doctrine/common", 220 | "version": "v2.8.1", 221 | "source": { 222 | "type": "git", 223 | "url": "https://github.com/doctrine/common.git", 224 | "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66" 225 | }, 226 | "dist": { 227 | "type": "zip", 228 | "url": "https://api.github.com/repos/doctrine/common/zipball/f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", 229 | "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", 230 | "shasum": "" 231 | }, 232 | "require": { 233 | "doctrine/annotations": "1.*", 234 | "doctrine/cache": "1.*", 235 | "doctrine/collections": "1.*", 236 | "doctrine/inflector": "1.*", 237 | "doctrine/lexer": "1.*", 238 | "php": "~7.1" 239 | }, 240 | "require-dev": { 241 | "phpunit/phpunit": "^5.7" 242 | }, 243 | "type": "library", 244 | "extra": { 245 | "branch-alias": { 246 | "dev-master": "2.8.x-dev" 247 | } 248 | }, 249 | "autoload": { 250 | "psr-4": { 251 | "Doctrine\\Common\\": "lib/Doctrine/Common" 252 | } 253 | }, 254 | "notification-url": "https://packagist.org/downloads/", 255 | "license": [ 256 | "MIT" 257 | ], 258 | "authors": [ 259 | { 260 | "name": "Roman Borschel", 261 | "email": "roman@code-factory.org" 262 | }, 263 | { 264 | "name": "Benjamin Eberlei", 265 | "email": "kontakt@beberlei.de" 266 | }, 267 | { 268 | "name": "Guilherme Blanco", 269 | "email": "guilhermeblanco@gmail.com" 270 | }, 271 | { 272 | "name": "Jonathan Wage", 273 | "email": "jonwage@gmail.com" 274 | }, 275 | { 276 | "name": "Johannes Schmitt", 277 | "email": "schmittjoh@gmail.com" 278 | } 279 | ], 280 | "description": "Common Library for Doctrine projects", 281 | "homepage": "http://www.doctrine-project.org", 282 | "keywords": [ 283 | "annotations", 284 | "collections", 285 | "eventmanager", 286 | "persistence", 287 | "spl" 288 | ], 289 | "time": "2017-08-31T08:43:38+00:00" 290 | }, 291 | { 292 | "name": "doctrine/inflector", 293 | "version": "v1.2.0", 294 | "source": { 295 | "type": "git", 296 | "url": "https://github.com/doctrine/inflector.git", 297 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" 298 | }, 299 | "dist": { 300 | "type": "zip", 301 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", 302 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", 303 | "shasum": "" 304 | }, 305 | "require": { 306 | "php": "^7.0" 307 | }, 308 | "require-dev": { 309 | "phpunit/phpunit": "^6.2" 310 | }, 311 | "type": "library", 312 | "extra": { 313 | "branch-alias": { 314 | "dev-master": "1.2.x-dev" 315 | } 316 | }, 317 | "autoload": { 318 | "psr-4": { 319 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 320 | } 321 | }, 322 | "notification-url": "https://packagist.org/downloads/", 323 | "license": [ 324 | "MIT" 325 | ], 326 | "authors": [ 327 | { 328 | "name": "Roman Borschel", 329 | "email": "roman@code-factory.org" 330 | }, 331 | { 332 | "name": "Benjamin Eberlei", 333 | "email": "kontakt@beberlei.de" 334 | }, 335 | { 336 | "name": "Guilherme Blanco", 337 | "email": "guilhermeblanco@gmail.com" 338 | }, 339 | { 340 | "name": "Jonathan Wage", 341 | "email": "jonwage@gmail.com" 342 | }, 343 | { 344 | "name": "Johannes Schmitt", 345 | "email": "schmittjoh@gmail.com" 346 | } 347 | ], 348 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 349 | "homepage": "http://www.doctrine-project.org", 350 | "keywords": [ 351 | "inflection", 352 | "pluralize", 353 | "singularize", 354 | "string" 355 | ], 356 | "time": "2017-07-22T12:18:28+00:00" 357 | }, 358 | { 359 | "name": "doctrine/lexer", 360 | "version": "v1.0.1", 361 | "source": { 362 | "type": "git", 363 | "url": "https://github.com/doctrine/lexer.git", 364 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 365 | }, 366 | "dist": { 367 | "type": "zip", 368 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 369 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 370 | "shasum": "" 371 | }, 372 | "require": { 373 | "php": ">=5.3.2" 374 | }, 375 | "type": "library", 376 | "extra": { 377 | "branch-alias": { 378 | "dev-master": "1.0.x-dev" 379 | } 380 | }, 381 | "autoload": { 382 | "psr-0": { 383 | "Doctrine\\Common\\Lexer\\": "lib/" 384 | } 385 | }, 386 | "notification-url": "https://packagist.org/downloads/", 387 | "license": [ 388 | "MIT" 389 | ], 390 | "authors": [ 391 | { 392 | "name": "Roman Borschel", 393 | "email": "roman@code-factory.org" 394 | }, 395 | { 396 | "name": "Guilherme Blanco", 397 | "email": "guilhermeblanco@gmail.com" 398 | }, 399 | { 400 | "name": "Johannes Schmitt", 401 | "email": "schmittjoh@gmail.com" 402 | } 403 | ], 404 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 405 | "homepage": "http://www.doctrine-project.org", 406 | "keywords": [ 407 | "lexer", 408 | "parser" 409 | ], 410 | "time": "2014-09-09T13:34:57+00:00" 411 | }, 412 | { 413 | "name": "psr/cache", 414 | "version": "1.0.1", 415 | "source": { 416 | "type": "git", 417 | "url": "https://github.com/php-fig/cache.git", 418 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" 419 | }, 420 | "dist": { 421 | "type": "zip", 422 | "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", 423 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", 424 | "shasum": "" 425 | }, 426 | "require": { 427 | "php": ">=5.3.0" 428 | }, 429 | "type": "library", 430 | "extra": { 431 | "branch-alias": { 432 | "dev-master": "1.0.x-dev" 433 | } 434 | }, 435 | "autoload": { 436 | "psr-4": { 437 | "Psr\\Cache\\": "src/" 438 | } 439 | }, 440 | "notification-url": "https://packagist.org/downloads/", 441 | "license": [ 442 | "MIT" 443 | ], 444 | "authors": [ 445 | { 446 | "name": "PHP-FIG", 447 | "homepage": "http://www.php-fig.org/" 448 | } 449 | ], 450 | "description": "Common interface for caching libraries", 451 | "keywords": [ 452 | "cache", 453 | "psr", 454 | "psr-6" 455 | ], 456 | "time": "2016-08-06T20:24:11+00:00" 457 | }, 458 | { 459 | "name": "psr/container", 460 | "version": "1.0.0", 461 | "source": { 462 | "type": "git", 463 | "url": "https://github.com/php-fig/container.git", 464 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 465 | }, 466 | "dist": { 467 | "type": "zip", 468 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 469 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 470 | "shasum": "" 471 | }, 472 | "require": { 473 | "php": ">=5.3.0" 474 | }, 475 | "type": "library", 476 | "extra": { 477 | "branch-alias": { 478 | "dev-master": "1.0.x-dev" 479 | } 480 | }, 481 | "autoload": { 482 | "psr-4": { 483 | "Psr\\Container\\": "src/" 484 | } 485 | }, 486 | "notification-url": "https://packagist.org/downloads/", 487 | "license": [ 488 | "MIT" 489 | ], 490 | "authors": [ 491 | { 492 | "name": "PHP-FIG", 493 | "homepage": "http://www.php-fig.org/" 494 | } 495 | ], 496 | "description": "Common Container Interface (PHP FIG PSR-11)", 497 | "homepage": "https://github.com/php-fig/container", 498 | "keywords": [ 499 | "PSR-11", 500 | "container", 501 | "container-interface", 502 | "container-interop", 503 | "psr" 504 | ], 505 | "time": "2017-02-14T16:28:37+00:00" 506 | }, 507 | { 508 | "name": "psr/log", 509 | "version": "1.0.2", 510 | "source": { 511 | "type": "git", 512 | "url": "https://github.com/php-fig/log.git", 513 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 514 | }, 515 | "dist": { 516 | "type": "zip", 517 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 518 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 519 | "shasum": "" 520 | }, 521 | "require": { 522 | "php": ">=5.3.0" 523 | }, 524 | "type": "library", 525 | "extra": { 526 | "branch-alias": { 527 | "dev-master": "1.0.x-dev" 528 | } 529 | }, 530 | "autoload": { 531 | "psr-4": { 532 | "Psr\\Log\\": "Psr/Log/" 533 | } 534 | }, 535 | "notification-url": "https://packagist.org/downloads/", 536 | "license": [ 537 | "MIT" 538 | ], 539 | "authors": [ 540 | { 541 | "name": "PHP-FIG", 542 | "homepage": "http://www.php-fig.org/" 543 | } 544 | ], 545 | "description": "Common interface for logging libraries", 546 | "homepage": "https://github.com/php-fig/log", 547 | "keywords": [ 548 | "log", 549 | "psr", 550 | "psr-3" 551 | ], 552 | "time": "2016-10-10T12:19:37+00:00" 553 | }, 554 | { 555 | "name": "psr/simple-cache", 556 | "version": "1.0.0", 557 | "source": { 558 | "type": "git", 559 | "url": "https://github.com/php-fig/simple-cache.git", 560 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" 561 | }, 562 | "dist": { 563 | "type": "zip", 564 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", 565 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", 566 | "shasum": "" 567 | }, 568 | "require": { 569 | "php": ">=5.3.0" 570 | }, 571 | "type": "library", 572 | "extra": { 573 | "branch-alias": { 574 | "dev-master": "1.0.x-dev" 575 | } 576 | }, 577 | "autoload": { 578 | "psr-4": { 579 | "Psr\\SimpleCache\\": "src/" 580 | } 581 | }, 582 | "notification-url": "https://packagist.org/downloads/", 583 | "license": [ 584 | "MIT" 585 | ], 586 | "authors": [ 587 | { 588 | "name": "PHP-FIG", 589 | "homepage": "http://www.php-fig.org/" 590 | } 591 | ], 592 | "description": "Common interfaces for simple caching", 593 | "keywords": [ 594 | "cache", 595 | "caching", 596 | "psr", 597 | "psr-16", 598 | "simple-cache" 599 | ], 600 | "time": "2017-01-02T13:31:39+00:00" 601 | }, 602 | { 603 | "name": "sensio/framework-extra-bundle", 604 | "version": "v5.1.3", 605 | "source": { 606 | "type": "git", 607 | "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", 608 | "reference": "0696496cb3e2d23add645d424699e5c723238aad" 609 | }, 610 | "dist": { 611 | "type": "zip", 612 | "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/0696496cb3e2d23add645d424699e5c723238aad", 613 | "reference": "0696496cb3e2d23add645d424699e5c723238aad", 614 | "shasum": "" 615 | }, 616 | "require": { 617 | "doctrine/common": "^2.2", 618 | "symfony/config": "^3.3|^4.0", 619 | "symfony/dependency-injection": "^3.3|^4.0", 620 | "symfony/framework-bundle": "^3.3|^4.0", 621 | "symfony/http-kernel": "^3.3|^4.0" 622 | }, 623 | "require-dev": { 624 | "doctrine/doctrine-bundle": "^1.6", 625 | "doctrine/orm": "^2.5", 626 | "symfony/browser-kit": "^3.3|^4.0", 627 | "symfony/dom-crawler": "^3.3|^4.0", 628 | "symfony/expression-language": "^3.3|^4.0", 629 | "symfony/finder": "^3.3|^4.0", 630 | "symfony/phpunit-bridge": "^3.3|^4.0", 631 | "symfony/psr-http-message-bridge": "^0.3", 632 | "symfony/security-bundle": "^3.3|^4.0", 633 | "symfony/twig-bundle": "^3.3|^4.0", 634 | "symfony/yaml": "^3.3|^4.0", 635 | "twig/twig": "~1.12|~2.0", 636 | "zendframework/zend-diactoros": "^1.3" 637 | }, 638 | "suggest": { 639 | "symfony/expression-language": "", 640 | "symfony/psr-http-message-bridge": "To use the PSR-7 converters", 641 | "symfony/security-bundle": "" 642 | }, 643 | "type": "symfony-bundle", 644 | "extra": { 645 | "branch-alias": { 646 | "dev-master": "5.1.x-dev" 647 | } 648 | }, 649 | "autoload": { 650 | "psr-4": { 651 | "Sensio\\Bundle\\FrameworkExtraBundle\\": "" 652 | } 653 | }, 654 | "notification-url": "https://packagist.org/downloads/", 655 | "license": [ 656 | "MIT" 657 | ], 658 | "authors": [ 659 | { 660 | "name": "Fabien Potencier", 661 | "email": "fabien@symfony.com" 662 | } 663 | ], 664 | "description": "This bundle provides a way to configure your controllers with annotations", 665 | "keywords": [ 666 | "annotations", 667 | "controllers" 668 | ], 669 | "time": "2017-12-04T18:33:55+00:00" 670 | }, 671 | { 672 | "name": "symfony/asset", 673 | "version": "v4.0.3", 674 | "source": { 675 | "type": "git", 676 | "url": "https://github.com/symfony/asset.git", 677 | "reference": "db6063ab6e71c0d4910328a4d10eba197e1d6b40" 678 | }, 679 | "dist": { 680 | "type": "zip", 681 | "url": "https://api.github.com/repos/symfony/asset/zipball/db6063ab6e71c0d4910328a4d10eba197e1d6b40", 682 | "reference": "db6063ab6e71c0d4910328a4d10eba197e1d6b40", 683 | "shasum": "" 684 | }, 685 | "require": { 686 | "php": "^7.1.3" 687 | }, 688 | "require-dev": { 689 | "symfony/http-foundation": "~3.4|~4.0", 690 | "symfony/http-kernel": "~3.4|~4.0" 691 | }, 692 | "suggest": { 693 | "symfony/http-foundation": "" 694 | }, 695 | "type": "library", 696 | "extra": { 697 | "branch-alias": { 698 | "dev-master": "4.0-dev" 699 | } 700 | }, 701 | "autoload": { 702 | "psr-4": { 703 | "Symfony\\Component\\Asset\\": "" 704 | }, 705 | "exclude-from-classmap": [ 706 | "/Tests/" 707 | ] 708 | }, 709 | "notification-url": "https://packagist.org/downloads/", 710 | "license": [ 711 | "MIT" 712 | ], 713 | "authors": [ 714 | { 715 | "name": "Fabien Potencier", 716 | "email": "fabien@symfony.com" 717 | }, 718 | { 719 | "name": "Symfony Community", 720 | "homepage": "https://symfony.com/contributors" 721 | } 722 | ], 723 | "description": "Symfony Asset Component", 724 | "homepage": "https://symfony.com", 725 | "time": "2018-01-03T07:38:00+00:00" 726 | }, 727 | { 728 | "name": "symfony/cache", 729 | "version": "v4.0.2", 730 | "source": { 731 | "type": "git", 732 | "url": "https://github.com/symfony/cache.git", 733 | "reference": "d00351f230ca037ca13f6fec3411e002043f7421" 734 | }, 735 | "dist": { 736 | "type": "zip", 737 | "url": "https://api.github.com/repos/symfony/cache/zipball/d00351f230ca037ca13f6fec3411e002043f7421", 738 | "reference": "d00351f230ca037ca13f6fec3411e002043f7421", 739 | "shasum": "" 740 | }, 741 | "require": { 742 | "php": "^7.1.3", 743 | "psr/cache": "~1.0", 744 | "psr/log": "~1.0", 745 | "psr/simple-cache": "^1.0" 746 | }, 747 | "conflict": { 748 | "symfony/var-dumper": "<3.4" 749 | }, 750 | "provide": { 751 | "psr/cache-implementation": "1.0", 752 | "psr/simple-cache-implementation": "1.0" 753 | }, 754 | "require-dev": { 755 | "cache/integration-tests": "dev-master", 756 | "doctrine/cache": "~1.6", 757 | "doctrine/dbal": "~2.4", 758 | "predis/predis": "~1.0" 759 | }, 760 | "type": "library", 761 | "extra": { 762 | "branch-alias": { 763 | "dev-master": "4.0-dev" 764 | } 765 | }, 766 | "autoload": { 767 | "psr-4": { 768 | "Symfony\\Component\\Cache\\": "" 769 | }, 770 | "exclude-from-classmap": [ 771 | "/Tests/" 772 | ] 773 | }, 774 | "notification-url": "https://packagist.org/downloads/", 775 | "license": [ 776 | "MIT" 777 | ], 778 | "authors": [ 779 | { 780 | "name": "Nicolas Grekas", 781 | "email": "p@tchwork.com" 782 | }, 783 | { 784 | "name": "Symfony Community", 785 | "homepage": "https://symfony.com/contributors" 786 | } 787 | ], 788 | "description": "Symfony Cache component with PSR-6, PSR-16, and tags", 789 | "homepage": "https://symfony.com", 790 | "keywords": [ 791 | "caching", 792 | "psr6" 793 | ], 794 | "time": "2017-12-08T16:11:45+00:00" 795 | }, 796 | { 797 | "name": "symfony/config", 798 | "version": "v4.0.3", 799 | "source": { 800 | "type": "git", 801 | "url": "https://github.com/symfony/config.git", 802 | "reference": "0e86d267db0851cf55f339c97df00d693fe8592f" 803 | }, 804 | "dist": { 805 | "type": "zip", 806 | "url": "https://api.github.com/repos/symfony/config/zipball/0e86d267db0851cf55f339c97df00d693fe8592f", 807 | "reference": "0e86d267db0851cf55f339c97df00d693fe8592f", 808 | "shasum": "" 809 | }, 810 | "require": { 811 | "php": "^7.1.3", 812 | "symfony/filesystem": "~3.4|~4.0" 813 | }, 814 | "conflict": { 815 | "symfony/finder": "<3.4" 816 | }, 817 | "require-dev": { 818 | "symfony/finder": "~3.4|~4.0", 819 | "symfony/yaml": "~3.4|~4.0" 820 | }, 821 | "suggest": { 822 | "symfony/yaml": "To use the yaml reference dumper" 823 | }, 824 | "type": "library", 825 | "extra": { 826 | "branch-alias": { 827 | "dev-master": "4.0-dev" 828 | } 829 | }, 830 | "autoload": { 831 | "psr-4": { 832 | "Symfony\\Component\\Config\\": "" 833 | }, 834 | "exclude-from-classmap": [ 835 | "/Tests/" 836 | ] 837 | }, 838 | "notification-url": "https://packagist.org/downloads/", 839 | "license": [ 840 | "MIT" 841 | ], 842 | "authors": [ 843 | { 844 | "name": "Fabien Potencier", 845 | "email": "fabien@symfony.com" 846 | }, 847 | { 848 | "name": "Symfony Community", 849 | "homepage": "https://symfony.com/contributors" 850 | } 851 | ], 852 | "description": "Symfony Config Component", 853 | "homepage": "https://symfony.com", 854 | "time": "2018-01-03T07:38:00+00:00" 855 | }, 856 | { 857 | "name": "symfony/console", 858 | "version": "v4.0.2", 859 | "source": { 860 | "type": "git", 861 | "url": "https://github.com/symfony/console.git", 862 | "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714" 863 | }, 864 | "dist": { 865 | "type": "zip", 866 | "url": "https://api.github.com/repos/symfony/console/zipball/de8cf039eacdec59d83f7def67e3b8ff5ed46714", 867 | "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714", 868 | "shasum": "" 869 | }, 870 | "require": { 871 | "php": "^7.1.3", 872 | "symfony/polyfill-mbstring": "~1.0" 873 | }, 874 | "conflict": { 875 | "symfony/dependency-injection": "<3.4", 876 | "symfony/process": "<3.3" 877 | }, 878 | "require-dev": { 879 | "psr/log": "~1.0", 880 | "symfony/config": "~3.4|~4.0", 881 | "symfony/dependency-injection": "~3.4|~4.0", 882 | "symfony/event-dispatcher": "~3.4|~4.0", 883 | "symfony/lock": "~3.4|~4.0", 884 | "symfony/process": "~3.4|~4.0" 885 | }, 886 | "suggest": { 887 | "psr/log": "For using the console logger", 888 | "symfony/event-dispatcher": "", 889 | "symfony/lock": "", 890 | "symfony/process": "" 891 | }, 892 | "type": "library", 893 | "extra": { 894 | "branch-alias": { 895 | "dev-master": "4.0-dev" 896 | } 897 | }, 898 | "autoload": { 899 | "psr-4": { 900 | "Symfony\\Component\\Console\\": "" 901 | }, 902 | "exclude-from-classmap": [ 903 | "/Tests/" 904 | ] 905 | }, 906 | "notification-url": "https://packagist.org/downloads/", 907 | "license": [ 908 | "MIT" 909 | ], 910 | "authors": [ 911 | { 912 | "name": "Fabien Potencier", 913 | "email": "fabien@symfony.com" 914 | }, 915 | { 916 | "name": "Symfony Community", 917 | "homepage": "https://symfony.com/contributors" 918 | } 919 | ], 920 | "description": "Symfony Console Component", 921 | "homepage": "https://symfony.com", 922 | "time": "2017-12-14T19:48:22+00:00" 923 | }, 924 | { 925 | "name": "symfony/debug", 926 | "version": "v4.0.3", 927 | "source": { 928 | "type": "git", 929 | "url": "https://github.com/symfony/debug.git", 930 | "reference": "9ae4223a661b56a9abdce144de4886cca37f198f" 931 | }, 932 | "dist": { 933 | "type": "zip", 934 | "url": "https://api.github.com/repos/symfony/debug/zipball/9ae4223a661b56a9abdce144de4886cca37f198f", 935 | "reference": "9ae4223a661b56a9abdce144de4886cca37f198f", 936 | "shasum": "" 937 | }, 938 | "require": { 939 | "php": "^7.1.3", 940 | "psr/log": "~1.0" 941 | }, 942 | "conflict": { 943 | "symfony/http-kernel": "<3.4" 944 | }, 945 | "require-dev": { 946 | "symfony/http-kernel": "~3.4|~4.0" 947 | }, 948 | "type": "library", 949 | "extra": { 950 | "branch-alias": { 951 | "dev-master": "4.0-dev" 952 | } 953 | }, 954 | "autoload": { 955 | "psr-4": { 956 | "Symfony\\Component\\Debug\\": "" 957 | }, 958 | "exclude-from-classmap": [ 959 | "/Tests/" 960 | ] 961 | }, 962 | "notification-url": "https://packagist.org/downloads/", 963 | "license": [ 964 | "MIT" 965 | ], 966 | "authors": [ 967 | { 968 | "name": "Fabien Potencier", 969 | "email": "fabien@symfony.com" 970 | }, 971 | { 972 | "name": "Symfony Community", 973 | "homepage": "https://symfony.com/contributors" 974 | } 975 | ], 976 | "description": "Symfony Debug Component", 977 | "homepage": "https://symfony.com", 978 | "time": "2018-01-03T17:15:19+00:00" 979 | }, 980 | { 981 | "name": "symfony/dependency-injection", 982 | "version": "v4.0.3", 983 | "source": { 984 | "type": "git", 985 | "url": "https://github.com/symfony/dependency-injection.git", 986 | "reference": "67bf5e4f4da85624f30a5e43b7f43225c8b71959" 987 | }, 988 | "dist": { 989 | "type": "zip", 990 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/67bf5e4f4da85624f30a5e43b7f43225c8b71959", 991 | "reference": "67bf5e4f4da85624f30a5e43b7f43225c8b71959", 992 | "shasum": "" 993 | }, 994 | "require": { 995 | "php": "^7.1.3", 996 | "psr/container": "^1.0" 997 | }, 998 | "conflict": { 999 | "symfony/config": "<3.4", 1000 | "symfony/finder": "<3.4", 1001 | "symfony/proxy-manager-bridge": "<3.4", 1002 | "symfony/yaml": "<3.4" 1003 | }, 1004 | "provide": { 1005 | "psr/container-implementation": "1.0" 1006 | }, 1007 | "require-dev": { 1008 | "symfony/config": "~3.4|~4.0", 1009 | "symfony/expression-language": "~3.4|~4.0", 1010 | "symfony/yaml": "~3.4|~4.0" 1011 | }, 1012 | "suggest": { 1013 | "symfony/config": "", 1014 | "symfony/expression-language": "For using expressions in service container configuration", 1015 | "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", 1016 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", 1017 | "symfony/yaml": "" 1018 | }, 1019 | "type": "library", 1020 | "extra": { 1021 | "branch-alias": { 1022 | "dev-master": "4.0-dev" 1023 | } 1024 | }, 1025 | "autoload": { 1026 | "psr-4": { 1027 | "Symfony\\Component\\DependencyInjection\\": "" 1028 | }, 1029 | "exclude-from-classmap": [ 1030 | "/Tests/" 1031 | ] 1032 | }, 1033 | "notification-url": "https://packagist.org/downloads/", 1034 | "license": [ 1035 | "MIT" 1036 | ], 1037 | "authors": [ 1038 | { 1039 | "name": "Fabien Potencier", 1040 | "email": "fabien@symfony.com" 1041 | }, 1042 | { 1043 | "name": "Symfony Community", 1044 | "homepage": "https://symfony.com/contributors" 1045 | } 1046 | ], 1047 | "description": "Symfony DependencyInjection Component", 1048 | "homepage": "https://symfony.com", 1049 | "time": "2018-01-04T15:52:56+00:00" 1050 | }, 1051 | { 1052 | "name": "symfony/event-dispatcher", 1053 | "version": "v4.0.3", 1054 | "source": { 1055 | "type": "git", 1056 | "url": "https://github.com/symfony/event-dispatcher.git", 1057 | "reference": "74d33aac36208c4d6757807d9f598f0133a3a4eb" 1058 | }, 1059 | "dist": { 1060 | "type": "zip", 1061 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/74d33aac36208c4d6757807d9f598f0133a3a4eb", 1062 | "reference": "74d33aac36208c4d6757807d9f598f0133a3a4eb", 1063 | "shasum": "" 1064 | }, 1065 | "require": { 1066 | "php": "^7.1.3" 1067 | }, 1068 | "conflict": { 1069 | "symfony/dependency-injection": "<3.4" 1070 | }, 1071 | "require-dev": { 1072 | "psr/log": "~1.0", 1073 | "symfony/config": "~3.4|~4.0", 1074 | "symfony/dependency-injection": "~3.4|~4.0", 1075 | "symfony/expression-language": "~3.4|~4.0", 1076 | "symfony/stopwatch": "~3.4|~4.0" 1077 | }, 1078 | "suggest": { 1079 | "symfony/dependency-injection": "", 1080 | "symfony/http-kernel": "" 1081 | }, 1082 | "type": "library", 1083 | "extra": { 1084 | "branch-alias": { 1085 | "dev-master": "4.0-dev" 1086 | } 1087 | }, 1088 | "autoload": { 1089 | "psr-4": { 1090 | "Symfony\\Component\\EventDispatcher\\": "" 1091 | }, 1092 | "exclude-from-classmap": [ 1093 | "/Tests/" 1094 | ] 1095 | }, 1096 | "notification-url": "https://packagist.org/downloads/", 1097 | "license": [ 1098 | "MIT" 1099 | ], 1100 | "authors": [ 1101 | { 1102 | "name": "Fabien Potencier", 1103 | "email": "fabien@symfony.com" 1104 | }, 1105 | { 1106 | "name": "Symfony Community", 1107 | "homepage": "https://symfony.com/contributors" 1108 | } 1109 | ], 1110 | "description": "Symfony EventDispatcher Component", 1111 | "homepage": "https://symfony.com", 1112 | "time": "2018-01-03T07:38:00+00:00" 1113 | }, 1114 | { 1115 | "name": "symfony/filesystem", 1116 | "version": "v4.0.3", 1117 | "source": { 1118 | "type": "git", 1119 | "url": "https://github.com/symfony/filesystem.git", 1120 | "reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed" 1121 | }, 1122 | "dist": { 1123 | "type": "zip", 1124 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/760e47a4ee64b4c48f4b30017011e09d4c0f05ed", 1125 | "reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed", 1126 | "shasum": "" 1127 | }, 1128 | "require": { 1129 | "php": "^7.1.3" 1130 | }, 1131 | "type": "library", 1132 | "extra": { 1133 | "branch-alias": { 1134 | "dev-master": "4.0-dev" 1135 | } 1136 | }, 1137 | "autoload": { 1138 | "psr-4": { 1139 | "Symfony\\Component\\Filesystem\\": "" 1140 | }, 1141 | "exclude-from-classmap": [ 1142 | "/Tests/" 1143 | ] 1144 | }, 1145 | "notification-url": "https://packagist.org/downloads/", 1146 | "license": [ 1147 | "MIT" 1148 | ], 1149 | "authors": [ 1150 | { 1151 | "name": "Fabien Potencier", 1152 | "email": "fabien@symfony.com" 1153 | }, 1154 | { 1155 | "name": "Symfony Community", 1156 | "homepage": "https://symfony.com/contributors" 1157 | } 1158 | ], 1159 | "description": "Symfony Filesystem Component", 1160 | "homepage": "https://symfony.com", 1161 | "time": "2018-01-03T07:38:00+00:00" 1162 | }, 1163 | { 1164 | "name": "symfony/finder", 1165 | "version": "v4.0.2", 1166 | "source": { 1167 | "type": "git", 1168 | "url": "https://github.com/symfony/finder.git", 1169 | "reference": "c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c" 1170 | }, 1171 | "dist": { 1172 | "type": "zip", 1173 | "url": "https://api.github.com/repos/symfony/finder/zipball/c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c", 1174 | "reference": "c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c", 1175 | "shasum": "" 1176 | }, 1177 | "require": { 1178 | "php": "^7.1.3" 1179 | }, 1180 | "type": "library", 1181 | "extra": { 1182 | "branch-alias": { 1183 | "dev-master": "4.0-dev" 1184 | } 1185 | }, 1186 | "autoload": { 1187 | "psr-4": { 1188 | "Symfony\\Component\\Finder\\": "" 1189 | }, 1190 | "exclude-from-classmap": [ 1191 | "/Tests/" 1192 | ] 1193 | }, 1194 | "notification-url": "https://packagist.org/downloads/", 1195 | "license": [ 1196 | "MIT" 1197 | ], 1198 | "authors": [ 1199 | { 1200 | "name": "Fabien Potencier", 1201 | "email": "fabien@symfony.com" 1202 | }, 1203 | { 1204 | "name": "Symfony Community", 1205 | "homepage": "https://symfony.com/contributors" 1206 | } 1207 | ], 1208 | "description": "Symfony Finder Component", 1209 | "homepage": "https://symfony.com", 1210 | "time": "2017-11-07T14:45:01+00:00" 1211 | }, 1212 | { 1213 | "name": "symfony/flex", 1214 | "version": "v1.0.51", 1215 | "source": { 1216 | "type": "git", 1217 | "url": "https://github.com/symfony/flex.git", 1218 | "reference": "adb823e2d21c88174a03f16a7b7eb9879b83107f" 1219 | }, 1220 | "dist": { 1221 | "type": "zip", 1222 | "url": "https://api.github.com/repos/symfony/flex/zipball/adb823e2d21c88174a03f16a7b7eb9879b83107f", 1223 | "reference": "adb823e2d21c88174a03f16a7b7eb9879b83107f", 1224 | "shasum": "" 1225 | }, 1226 | "require": { 1227 | "composer-plugin-api": "^1.1", 1228 | "php": "^7.0" 1229 | }, 1230 | "require-dev": { 1231 | "composer/composer": "^1.4", 1232 | "symfony/phpunit-bridge": "^3.2.8" 1233 | }, 1234 | "type": "composer-plugin", 1235 | "extra": { 1236 | "branch-alias": { 1237 | "dev-master": "1.0-dev" 1238 | }, 1239 | "class": "Symfony\\Flex\\Flex" 1240 | }, 1241 | "autoload": { 1242 | "psr-4": { 1243 | "Symfony\\Flex\\": "src" 1244 | } 1245 | }, 1246 | "notification-url": "https://packagist.org/downloads/", 1247 | "license": [ 1248 | "MIT" 1249 | ], 1250 | "authors": [ 1251 | { 1252 | "name": "Fabien Potencier", 1253 | "email": "fabien.potencier@gmail.com" 1254 | } 1255 | ], 1256 | "time": "2017-12-20T00:55:17+00:00" 1257 | }, 1258 | { 1259 | "name": "symfony/framework-bundle", 1260 | "version": "v4.0.2", 1261 | "source": { 1262 | "type": "git", 1263 | "url": "https://github.com/symfony/framework-bundle.git", 1264 | "reference": "82e45a486a2cbdab5d43512bea10af1681dcd8e2" 1265 | }, 1266 | "dist": { 1267 | "type": "zip", 1268 | "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/82e45a486a2cbdab5d43512bea10af1681dcd8e2", 1269 | "reference": "82e45a486a2cbdab5d43512bea10af1681dcd8e2", 1270 | "shasum": "" 1271 | }, 1272 | "require": { 1273 | "ext-xml": "*", 1274 | "php": "^7.1.3", 1275 | "symfony/cache": "~3.4|~4.0", 1276 | "symfony/config": "~3.4|~4.0", 1277 | "symfony/dependency-injection": "~3.4|~4.0", 1278 | "symfony/event-dispatcher": "~3.4|~4.0", 1279 | "symfony/filesystem": "~3.4|~4.0", 1280 | "symfony/finder": "~3.4|~4.0", 1281 | "symfony/http-foundation": "~3.4|~4.0", 1282 | "symfony/http-kernel": "~3.4|~4.0", 1283 | "symfony/polyfill-mbstring": "~1.0", 1284 | "symfony/routing": "~3.4|~4.0" 1285 | }, 1286 | "conflict": { 1287 | "phpdocumentor/reflection-docblock": "<3.0", 1288 | "phpdocumentor/type-resolver": "<0.2.1", 1289 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", 1290 | "symfony/asset": "<3.4", 1291 | "symfony/console": "<3.4", 1292 | "symfony/form": "<3.4", 1293 | "symfony/property-info": "<3.4", 1294 | "symfony/serializer": "<3.4", 1295 | "symfony/stopwatch": "<3.4", 1296 | "symfony/translation": "<3.4", 1297 | "symfony/validator": "<3.4", 1298 | "symfony/workflow": "<3.4" 1299 | }, 1300 | "require-dev": { 1301 | "doctrine/annotations": "~1.0", 1302 | "doctrine/cache": "~1.0", 1303 | "fig/link-util": "^1.0", 1304 | "phpdocumentor/reflection-docblock": "^3.0|^4.0", 1305 | "symfony/asset": "~3.4|~4.0", 1306 | "symfony/browser-kit": "~3.4|~4.0", 1307 | "symfony/console": "~3.4|~4.0", 1308 | "symfony/css-selector": "~3.4|~4.0", 1309 | "symfony/dom-crawler": "~3.4|~4.0", 1310 | "symfony/expression-language": "~3.4|~4.0", 1311 | "symfony/form": "~3.4|~4.0", 1312 | "symfony/lock": "~3.4|~4.0", 1313 | "symfony/polyfill-intl-icu": "~1.0", 1314 | "symfony/process": "~3.4|~4.0", 1315 | "symfony/property-info": "~3.4|~4.0", 1316 | "symfony/security": "~3.4|~4.0", 1317 | "symfony/security-core": "~3.4|~4.0", 1318 | "symfony/security-csrf": "~3.4|~4.0", 1319 | "symfony/serializer": "~3.4|~4.0", 1320 | "symfony/stopwatch": "~3.4|~4.0", 1321 | "symfony/templating": "~3.4|~4.0", 1322 | "symfony/translation": "~3.4|~4.0", 1323 | "symfony/validator": "~3.4|~4.0", 1324 | "symfony/var-dumper": "~3.4|~4.0", 1325 | "symfony/web-link": "~3.4|~4.0", 1326 | "symfony/workflow": "~3.4|~4.0", 1327 | "symfony/yaml": "~3.4|~4.0", 1328 | "twig/twig": "~1.34|~2.4" 1329 | }, 1330 | "suggest": { 1331 | "ext-apcu": "For best performance of the system caches", 1332 | "symfony/console": "For using the console commands", 1333 | "symfony/form": "For using forms", 1334 | "symfony/property-info": "For using the property_info service", 1335 | "symfony/serializer": "For using the serializer service", 1336 | "symfony/validator": "For using validation", 1337 | "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", 1338 | "symfony/yaml": "For using the debug:config and lint:yaml commands" 1339 | }, 1340 | "type": "symfony-bundle", 1341 | "extra": { 1342 | "branch-alias": { 1343 | "dev-master": "4.0-dev" 1344 | } 1345 | }, 1346 | "autoload": { 1347 | "psr-4": { 1348 | "Symfony\\Bundle\\FrameworkBundle\\": "" 1349 | }, 1350 | "exclude-from-classmap": [ 1351 | "/Tests/" 1352 | ] 1353 | }, 1354 | "notification-url": "https://packagist.org/downloads/", 1355 | "license": [ 1356 | "MIT" 1357 | ], 1358 | "authors": [ 1359 | { 1360 | "name": "Fabien Potencier", 1361 | "email": "fabien@symfony.com" 1362 | }, 1363 | { 1364 | "name": "Symfony Community", 1365 | "homepage": "https://symfony.com/contributors" 1366 | } 1367 | ], 1368 | "description": "Symfony FrameworkBundle", 1369 | "homepage": "https://symfony.com", 1370 | "time": "2017-12-15T01:44:28+00:00" 1371 | }, 1372 | { 1373 | "name": "symfony/http-foundation", 1374 | "version": "v4.0.3", 1375 | "source": { 1376 | "type": "git", 1377 | "url": "https://github.com/symfony/http-foundation.git", 1378 | "reference": "03fe5171e35966f43453e2e5c15d7fe65f7fb23b" 1379 | }, 1380 | "dist": { 1381 | "type": "zip", 1382 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/03fe5171e35966f43453e2e5c15d7fe65f7fb23b", 1383 | "reference": "03fe5171e35966f43453e2e5c15d7fe65f7fb23b", 1384 | "shasum": "" 1385 | }, 1386 | "require": { 1387 | "php": "^7.1.3", 1388 | "symfony/polyfill-mbstring": "~1.1" 1389 | }, 1390 | "require-dev": { 1391 | "symfony/expression-language": "~3.4|~4.0" 1392 | }, 1393 | "type": "library", 1394 | "extra": { 1395 | "branch-alias": { 1396 | "dev-master": "4.0-dev" 1397 | } 1398 | }, 1399 | "autoload": { 1400 | "psr-4": { 1401 | "Symfony\\Component\\HttpFoundation\\": "" 1402 | }, 1403 | "exclude-from-classmap": [ 1404 | "/Tests/" 1405 | ] 1406 | }, 1407 | "notification-url": "https://packagist.org/downloads/", 1408 | "license": [ 1409 | "MIT" 1410 | ], 1411 | "authors": [ 1412 | { 1413 | "name": "Fabien Potencier", 1414 | "email": "fabien@symfony.com" 1415 | }, 1416 | { 1417 | "name": "Symfony Community", 1418 | "homepage": "https://symfony.com/contributors" 1419 | } 1420 | ], 1421 | "description": "Symfony HttpFoundation Component", 1422 | "homepage": "https://symfony.com", 1423 | "time": "2018-01-03T17:15:19+00:00" 1424 | }, 1425 | { 1426 | "name": "symfony/http-kernel", 1427 | "version": "v4.0.3", 1428 | "source": { 1429 | "type": "git", 1430 | "url": "https://github.com/symfony/http-kernel.git", 1431 | "reference": "f707ed09d3b5799a26c985de480d48b48540d41a" 1432 | }, 1433 | "dist": { 1434 | "type": "zip", 1435 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f707ed09d3b5799a26c985de480d48b48540d41a", 1436 | "reference": "f707ed09d3b5799a26c985de480d48b48540d41a", 1437 | "shasum": "" 1438 | }, 1439 | "require": { 1440 | "php": "^7.1.3", 1441 | "psr/log": "~1.0", 1442 | "symfony/debug": "~3.4|~4.0", 1443 | "symfony/event-dispatcher": "~3.4|~4.0", 1444 | "symfony/http-foundation": "~3.4|~4.0" 1445 | }, 1446 | "conflict": { 1447 | "symfony/config": "<3.4", 1448 | "symfony/dependency-injection": "<3.4", 1449 | "symfony/var-dumper": "<3.4", 1450 | "twig/twig": "<1.34|<2.4,>=2" 1451 | }, 1452 | "provide": { 1453 | "psr/log-implementation": "1.0" 1454 | }, 1455 | "require-dev": { 1456 | "psr/cache": "~1.0", 1457 | "symfony/browser-kit": "~3.4|~4.0", 1458 | "symfony/config": "~3.4|~4.0", 1459 | "symfony/console": "~3.4|~4.0", 1460 | "symfony/css-selector": "~3.4|~4.0", 1461 | "symfony/dependency-injection": "~3.4|~4.0", 1462 | "symfony/dom-crawler": "~3.4|~4.0", 1463 | "symfony/expression-language": "~3.4|~4.0", 1464 | "symfony/finder": "~3.4|~4.0", 1465 | "symfony/process": "~3.4|~4.0", 1466 | "symfony/routing": "~3.4|~4.0", 1467 | "symfony/stopwatch": "~3.4|~4.0", 1468 | "symfony/templating": "~3.4|~4.0", 1469 | "symfony/translation": "~3.4|~4.0", 1470 | "symfony/var-dumper": "~3.4|~4.0" 1471 | }, 1472 | "suggest": { 1473 | "symfony/browser-kit": "", 1474 | "symfony/config": "", 1475 | "symfony/console": "", 1476 | "symfony/dependency-injection": "", 1477 | "symfony/var-dumper": "" 1478 | }, 1479 | "type": "library", 1480 | "extra": { 1481 | "branch-alias": { 1482 | "dev-master": "4.0-dev" 1483 | } 1484 | }, 1485 | "autoload": { 1486 | "psr-4": { 1487 | "Symfony\\Component\\HttpKernel\\": "" 1488 | }, 1489 | "exclude-from-classmap": [ 1490 | "/Tests/" 1491 | ] 1492 | }, 1493 | "notification-url": "https://packagist.org/downloads/", 1494 | "license": [ 1495 | "MIT" 1496 | ], 1497 | "authors": [ 1498 | { 1499 | "name": "Fabien Potencier", 1500 | "email": "fabien@symfony.com" 1501 | }, 1502 | { 1503 | "name": "Symfony Community", 1504 | "homepage": "https://symfony.com/contributors" 1505 | } 1506 | ], 1507 | "description": "Symfony HttpKernel Component", 1508 | "homepage": "https://symfony.com", 1509 | "time": "2018-01-05T08:54:25+00:00" 1510 | }, 1511 | { 1512 | "name": "symfony/lts", 1513 | "version": "dev-master", 1514 | "source": { 1515 | "type": "git", 1516 | "url": "https://github.com/symfony/lts.git", 1517 | "reference": "396c5fca8d73d01186df37d7031321a3c0c2bf92" 1518 | }, 1519 | "dist": { 1520 | "type": "zip", 1521 | "url": "https://api.github.com/repos/symfony/lts/zipball/396c5fca8d73d01186df37d7031321a3c0c2bf92", 1522 | "reference": "396c5fca8d73d01186df37d7031321a3c0c2bf92", 1523 | "shasum": "" 1524 | }, 1525 | "conflict": { 1526 | "symfony/asset": ">=5", 1527 | "symfony/browser-kit": ">=5", 1528 | "symfony/cache": ">=5", 1529 | "symfony/class-loader": ">=5", 1530 | "symfony/config": ">=5", 1531 | "symfony/console": ">=5", 1532 | "symfony/css-selector": ">=5", 1533 | "symfony/debug": ">=5", 1534 | "symfony/debug-bundle": ">=5", 1535 | "symfony/dependency-injection": ">=5", 1536 | "symfony/doctrine-bridge": ">=5", 1537 | "symfony/dom-crawler": ">=5", 1538 | "symfony/dotenv": ">=5", 1539 | "symfony/event-dispatcher": ">=5", 1540 | "symfony/expression-language": ">=5", 1541 | "symfony/filesystem": ">=5", 1542 | "symfony/finder": ">=5", 1543 | "symfony/form": ">=5", 1544 | "symfony/framework-bundle": ">=5", 1545 | "symfony/http-foundation": ">=5", 1546 | "symfony/http-kernel": ">=5", 1547 | "symfony/inflector": ">=5", 1548 | "symfony/intl": ">=5", 1549 | "symfony/ldap": ">=5", 1550 | "symfony/lock": ">=5", 1551 | "symfony/monolog-bridge": ">=5", 1552 | "symfony/options-resolver": ">=5", 1553 | "symfony/process": ">=5", 1554 | "symfony/property-access": ">=5", 1555 | "symfony/property-info": ">=5", 1556 | "symfony/proxy-manager-bridge": ">=5", 1557 | "symfony/routing": ">=5", 1558 | "symfony/security": ">=5", 1559 | "symfony/security-bundle": ">=5", 1560 | "symfony/security-core": ">=5", 1561 | "symfony/security-csrf": ">=5", 1562 | "symfony/security-guard": ">=5", 1563 | "symfony/security-http": ">=5", 1564 | "symfony/serializer": ">=5", 1565 | "symfony/stopwatch": ">=5", 1566 | "symfony/symfony": ">=5", 1567 | "symfony/templating": ">=5", 1568 | "symfony/translation": ">=5", 1569 | "symfony/twig-bridge": ">=5", 1570 | "symfony/twig-bundle": ">=5", 1571 | "symfony/validator": ">=5", 1572 | "symfony/var-dumper": ">=5", 1573 | "symfony/web-link": ">=5", 1574 | "symfony/web-profiler-bundle": ">=5", 1575 | "symfony/web-server-bundle": ">=5", 1576 | "symfony/workflow": ">=5", 1577 | "symfony/yaml": ">=5" 1578 | }, 1579 | "type": "metapackage", 1580 | "extra": { 1581 | "branch-alias": { 1582 | "dev-master": "4-dev" 1583 | } 1584 | }, 1585 | "notification-url": "https://packagist.org/downloads/", 1586 | "license": [ 1587 | "MIT" 1588 | ], 1589 | "authors": [ 1590 | { 1591 | "name": "Fabien Potencier", 1592 | "email": "fabien@symfony.com" 1593 | }, 1594 | { 1595 | "name": "Symfony Community", 1596 | "homepage": "https://symfony.com/contributors" 1597 | } 1598 | ], 1599 | "description": "Enforces Long Term Supported versions of Symfony components", 1600 | "homepage": "https://symfony.com", 1601 | "time": "2017-10-19T02:16:32+00:00" 1602 | }, 1603 | { 1604 | "name": "symfony/polyfill-mbstring", 1605 | "version": "v1.6.0", 1606 | "source": { 1607 | "type": "git", 1608 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1609 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" 1610 | }, 1611 | "dist": { 1612 | "type": "zip", 1613 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", 1614 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", 1615 | "shasum": "" 1616 | }, 1617 | "require": { 1618 | "php": ">=5.3.3" 1619 | }, 1620 | "suggest": { 1621 | "ext-mbstring": "For best performance" 1622 | }, 1623 | "type": "library", 1624 | "extra": { 1625 | "branch-alias": { 1626 | "dev-master": "1.6-dev" 1627 | } 1628 | }, 1629 | "autoload": { 1630 | "psr-4": { 1631 | "Symfony\\Polyfill\\Mbstring\\": "" 1632 | }, 1633 | "files": [ 1634 | "bootstrap.php" 1635 | ] 1636 | }, 1637 | "notification-url": "https://packagist.org/downloads/", 1638 | "license": [ 1639 | "MIT" 1640 | ], 1641 | "authors": [ 1642 | { 1643 | "name": "Nicolas Grekas", 1644 | "email": "p@tchwork.com" 1645 | }, 1646 | { 1647 | "name": "Symfony Community", 1648 | "homepage": "https://symfony.com/contributors" 1649 | } 1650 | ], 1651 | "description": "Symfony polyfill for the Mbstring extension", 1652 | "homepage": "https://symfony.com", 1653 | "keywords": [ 1654 | "compatibility", 1655 | "mbstring", 1656 | "polyfill", 1657 | "portable", 1658 | "shim" 1659 | ], 1660 | "time": "2017-10-11T12:05:26+00:00" 1661 | }, 1662 | { 1663 | "name": "symfony/routing", 1664 | "version": "v4.0.2", 1665 | "source": { 1666 | "type": "git", 1667 | "url": "https://github.com/symfony/routing.git", 1668 | "reference": "972810def5cae044d19195045f7eb418141bf37b" 1669 | }, 1670 | "dist": { 1671 | "type": "zip", 1672 | "url": "https://api.github.com/repos/symfony/routing/zipball/972810def5cae044d19195045f7eb418141bf37b", 1673 | "reference": "972810def5cae044d19195045f7eb418141bf37b", 1674 | "shasum": "" 1675 | }, 1676 | "require": { 1677 | "php": "^7.1.3" 1678 | }, 1679 | "conflict": { 1680 | "symfony/config": "<3.4", 1681 | "symfony/dependency-injection": "<3.4", 1682 | "symfony/yaml": "<3.4" 1683 | }, 1684 | "require-dev": { 1685 | "doctrine/annotations": "~1.0", 1686 | "doctrine/common": "~2.2", 1687 | "psr/log": "~1.0", 1688 | "symfony/config": "~3.4|~4.0", 1689 | "symfony/dependency-injection": "~3.4|~4.0", 1690 | "symfony/expression-language": "~3.4|~4.0", 1691 | "symfony/http-foundation": "~3.4|~4.0", 1692 | "symfony/yaml": "~3.4|~4.0" 1693 | }, 1694 | "suggest": { 1695 | "doctrine/annotations": "For using the annotation loader", 1696 | "symfony/config": "For using the all-in-one router or any loader", 1697 | "symfony/dependency-injection": "For loading routes from a service", 1698 | "symfony/expression-language": "For using expression matching", 1699 | "symfony/http-foundation": "For using a Symfony Request object", 1700 | "symfony/yaml": "For using the YAML loader" 1701 | }, 1702 | "type": "library", 1703 | "extra": { 1704 | "branch-alias": { 1705 | "dev-master": "4.0-dev" 1706 | } 1707 | }, 1708 | "autoload": { 1709 | "psr-4": { 1710 | "Symfony\\Component\\Routing\\": "" 1711 | }, 1712 | "exclude-from-classmap": [ 1713 | "/Tests/" 1714 | ] 1715 | }, 1716 | "notification-url": "https://packagist.org/downloads/", 1717 | "license": [ 1718 | "MIT" 1719 | ], 1720 | "authors": [ 1721 | { 1722 | "name": "Fabien Potencier", 1723 | "email": "fabien@symfony.com" 1724 | }, 1725 | { 1726 | "name": "Symfony Community", 1727 | "homepage": "https://symfony.com/contributors" 1728 | } 1729 | ], 1730 | "description": "Symfony Routing Component", 1731 | "homepage": "https://symfony.com", 1732 | "keywords": [ 1733 | "router", 1734 | "routing", 1735 | "uri", 1736 | "url" 1737 | ], 1738 | "time": "2017-12-14T22:39:22+00:00" 1739 | }, 1740 | { 1741 | "name": "symfony/twig-bridge", 1742 | "version": "v4.0.2", 1743 | "source": { 1744 | "type": "git", 1745 | "url": "https://github.com/symfony/twig-bridge.git", 1746 | "reference": "aeb221936ad39c579b7e002dfd4e7544a5d666f6" 1747 | }, 1748 | "dist": { 1749 | "type": "zip", 1750 | "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/aeb221936ad39c579b7e002dfd4e7544a5d666f6", 1751 | "reference": "aeb221936ad39c579b7e002dfd4e7544a5d666f6", 1752 | "shasum": "" 1753 | }, 1754 | "require": { 1755 | "php": "^7.1.3", 1756 | "twig/twig": "^1.35|^2.4.4" 1757 | }, 1758 | "conflict": { 1759 | "symfony/console": "<3.4", 1760 | "symfony/form": "<3.4" 1761 | }, 1762 | "require-dev": { 1763 | "symfony/asset": "~3.4|~4.0", 1764 | "symfony/console": "~3.4|~4.0", 1765 | "symfony/dependency-injection": "~3.4|~4.0", 1766 | "symfony/expression-language": "~3.4|~4.0", 1767 | "symfony/finder": "~3.4|~4.0", 1768 | "symfony/form": "~3.4|~4.0", 1769 | "symfony/http-foundation": "~3.4|~4.0", 1770 | "symfony/http-kernel": "~3.4|~4.0", 1771 | "symfony/polyfill-intl-icu": "~1.0", 1772 | "symfony/routing": "~3.4|~4.0", 1773 | "symfony/security": "~3.4|~4.0", 1774 | "symfony/security-acl": "~2.8|~3.0", 1775 | "symfony/stopwatch": "~3.4|~4.0", 1776 | "symfony/templating": "~3.4|~4.0", 1777 | "symfony/translation": "~3.4|~4.0", 1778 | "symfony/var-dumper": "~3.4|~4.0", 1779 | "symfony/web-link": "~3.4|~4.0", 1780 | "symfony/workflow": "~3.4|~4.0", 1781 | "symfony/yaml": "~3.4|~4.0" 1782 | }, 1783 | "suggest": { 1784 | "symfony/asset": "For using the AssetExtension", 1785 | "symfony/expression-language": "For using the ExpressionExtension", 1786 | "symfony/finder": "", 1787 | "symfony/form": "For using the FormExtension", 1788 | "symfony/http-kernel": "For using the HttpKernelExtension", 1789 | "symfony/routing": "For using the RoutingExtension", 1790 | "symfony/security": "For using the SecurityExtension", 1791 | "symfony/stopwatch": "For using the StopwatchExtension", 1792 | "symfony/templating": "For using the TwigEngine", 1793 | "symfony/translation": "For using the TranslationExtension", 1794 | "symfony/var-dumper": "For using the DumpExtension", 1795 | "symfony/web-link": "For using the WebLinkExtension", 1796 | "symfony/yaml": "For using the YamlExtension" 1797 | }, 1798 | "type": "symfony-bridge", 1799 | "extra": { 1800 | "branch-alias": { 1801 | "dev-master": "4.0-dev" 1802 | } 1803 | }, 1804 | "autoload": { 1805 | "psr-4": { 1806 | "Symfony\\Bridge\\Twig\\": "" 1807 | }, 1808 | "exclude-from-classmap": [ 1809 | "/Tests/" 1810 | ] 1811 | }, 1812 | "notification-url": "https://packagist.org/downloads/", 1813 | "license": [ 1814 | "MIT" 1815 | ], 1816 | "authors": [ 1817 | { 1818 | "name": "Fabien Potencier", 1819 | "email": "fabien@symfony.com" 1820 | }, 1821 | { 1822 | "name": "Symfony Community", 1823 | "homepage": "https://symfony.com/contributors" 1824 | } 1825 | ], 1826 | "description": "Symfony Twig Bridge", 1827 | "homepage": "https://symfony.com", 1828 | "time": "2017-12-12T08:41:51+00:00" 1829 | }, 1830 | { 1831 | "name": "symfony/twig-bundle", 1832 | "version": "v4.0.2", 1833 | "source": { 1834 | "type": "git", 1835 | "url": "https://github.com/symfony/twig-bundle.git", 1836 | "reference": "77381f8b99b319dc83e609c66942eb3a0a5b066d" 1837 | }, 1838 | "dist": { 1839 | "type": "zip", 1840 | "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/77381f8b99b319dc83e609c66942eb3a0a5b066d", 1841 | "reference": "77381f8b99b319dc83e609c66942eb3a0a5b066d", 1842 | "shasum": "" 1843 | }, 1844 | "require": { 1845 | "php": "^7.1.3", 1846 | "symfony/config": "~3.4|~4.0", 1847 | "symfony/http-foundation": "~3.4|~4.0", 1848 | "symfony/http-kernel": "~3.4|~4.0", 1849 | "symfony/twig-bridge": "~3.4|~4.0", 1850 | "twig/twig": "~1.34|~2.4" 1851 | }, 1852 | "conflict": { 1853 | "symfony/dependency-injection": "<3.4", 1854 | "symfony/event-dispatcher": "<3.4" 1855 | }, 1856 | "require-dev": { 1857 | "doctrine/annotations": "~1.0", 1858 | "doctrine/cache": "~1.0", 1859 | "symfony/asset": "~3.4|~4.0", 1860 | "symfony/dependency-injection": "~3.4|~4.0", 1861 | "symfony/expression-language": "~3.4|~4.0", 1862 | "symfony/finder": "~3.4|~4.0", 1863 | "symfony/form": "~3.4|~4.0", 1864 | "symfony/framework-bundle": "~3.4|~4.0", 1865 | "symfony/routing": "~3.4|~4.0", 1866 | "symfony/stopwatch": "~3.4|~4.0", 1867 | "symfony/templating": "~3.4|~4.0", 1868 | "symfony/web-link": "~3.4|~4.0", 1869 | "symfony/yaml": "~3.4|~4.0" 1870 | }, 1871 | "type": "symfony-bundle", 1872 | "extra": { 1873 | "branch-alias": { 1874 | "dev-master": "4.0-dev" 1875 | } 1876 | }, 1877 | "autoload": { 1878 | "psr-4": { 1879 | "Symfony\\Bundle\\TwigBundle\\": "" 1880 | }, 1881 | "exclude-from-classmap": [ 1882 | "/Tests/" 1883 | ] 1884 | }, 1885 | "notification-url": "https://packagist.org/downloads/", 1886 | "license": [ 1887 | "MIT" 1888 | ], 1889 | "authors": [ 1890 | { 1891 | "name": "Fabien Potencier", 1892 | "email": "fabien@symfony.com" 1893 | }, 1894 | { 1895 | "name": "Symfony Community", 1896 | "homepage": "https://symfony.com/contributors" 1897 | } 1898 | ], 1899 | "description": "Symfony TwigBundle", 1900 | "homepage": "https://symfony.com", 1901 | "time": "2017-12-04T12:31:58+00:00" 1902 | }, 1903 | { 1904 | "name": "symfony/webpack-encore-pack", 1905 | "version": "v1.0.2", 1906 | "source": { 1907 | "type": "git", 1908 | "url": "https://github.com/symfony/webpack-encore-pack.git", 1909 | "reference": "f9f4e91659e5f55de370d6aebe77e64bce35e4d3" 1910 | }, 1911 | "dist": { 1912 | "type": "zip", 1913 | "url": "https://api.github.com/repos/symfony/webpack-encore-pack/zipball/f9f4e91659e5f55de370d6aebe77e64bce35e4d3", 1914 | "reference": "f9f4e91659e5f55de370d6aebe77e64bce35e4d3", 1915 | "shasum": "" 1916 | }, 1917 | "type": "symfony-pack", 1918 | "extra": { 1919 | "thanks": { 1920 | "name": "symfony/webpack-encore", 1921 | "url": "https://github.com/symfony/webpack-encore" 1922 | } 1923 | }, 1924 | "notification-url": "https://packagist.org/downloads/", 1925 | "license": [ 1926 | "MIT" 1927 | ], 1928 | "description": "A pack for Symfony Encore", 1929 | "time": "2017-12-21T02:20:09+00:00" 1930 | }, 1931 | { 1932 | "name": "symfony/yaml", 1933 | "version": "v4.0.2", 1934 | "source": { 1935 | "type": "git", 1936 | "url": "https://github.com/symfony/yaml.git", 1937 | "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116" 1938 | }, 1939 | "dist": { 1940 | "type": "zip", 1941 | "url": "https://api.github.com/repos/symfony/yaml/zipball/a5ee52d155f06ad23b19eb63c31228ff56ad1116", 1942 | "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116", 1943 | "shasum": "" 1944 | }, 1945 | "require": { 1946 | "php": "^7.1.3" 1947 | }, 1948 | "conflict": { 1949 | "symfony/console": "<3.4" 1950 | }, 1951 | "require-dev": { 1952 | "symfony/console": "~3.4|~4.0" 1953 | }, 1954 | "suggest": { 1955 | "symfony/console": "For validating YAML files using the lint command" 1956 | }, 1957 | "type": "library", 1958 | "extra": { 1959 | "branch-alias": { 1960 | "dev-master": "4.0-dev" 1961 | } 1962 | }, 1963 | "autoload": { 1964 | "psr-4": { 1965 | "Symfony\\Component\\Yaml\\": "" 1966 | }, 1967 | "exclude-from-classmap": [ 1968 | "/Tests/" 1969 | ] 1970 | }, 1971 | "notification-url": "https://packagist.org/downloads/", 1972 | "license": [ 1973 | "MIT" 1974 | ], 1975 | "authors": [ 1976 | { 1977 | "name": "Fabien Potencier", 1978 | "email": "fabien@symfony.com" 1979 | }, 1980 | { 1981 | "name": "Symfony Community", 1982 | "homepage": "https://symfony.com/contributors" 1983 | } 1984 | ], 1985 | "description": "Symfony Yaml Component", 1986 | "homepage": "https://symfony.com", 1987 | "time": "2017-12-12T08:41:51+00:00" 1988 | }, 1989 | { 1990 | "name": "twig/twig", 1991 | "version": "v2.4.4", 1992 | "source": { 1993 | "type": "git", 1994 | "url": "https://github.com/twigphp/Twig.git", 1995 | "reference": "eddb97148ad779f27e670e1e3f19fb323aedafeb" 1996 | }, 1997 | "dist": { 1998 | "type": "zip", 1999 | "url": "https://api.github.com/repos/twigphp/Twig/zipball/eddb97148ad779f27e670e1e3f19fb323aedafeb", 2000 | "reference": "eddb97148ad779f27e670e1e3f19fb323aedafeb", 2001 | "shasum": "" 2002 | }, 2003 | "require": { 2004 | "php": "^7.0", 2005 | "symfony/polyfill-mbstring": "~1.0" 2006 | }, 2007 | "require-dev": { 2008 | "psr/container": "^1.0", 2009 | "symfony/debug": "~2.7", 2010 | "symfony/phpunit-bridge": "~3.3@dev" 2011 | }, 2012 | "type": "library", 2013 | "extra": { 2014 | "branch-alias": { 2015 | "dev-master": "2.4-dev" 2016 | } 2017 | }, 2018 | "autoload": { 2019 | "psr-0": { 2020 | "Twig_": "lib/" 2021 | }, 2022 | "psr-4": { 2023 | "Twig\\": "src/" 2024 | } 2025 | }, 2026 | "notification-url": "https://packagist.org/downloads/", 2027 | "license": [ 2028 | "BSD-3-Clause" 2029 | ], 2030 | "authors": [ 2031 | { 2032 | "name": "Fabien Potencier", 2033 | "email": "fabien@symfony.com", 2034 | "homepage": "http://fabien.potencier.org", 2035 | "role": "Lead Developer" 2036 | }, 2037 | { 2038 | "name": "Armin Ronacher", 2039 | "email": "armin.ronacher@active-4.com", 2040 | "role": "Project Founder" 2041 | }, 2042 | { 2043 | "name": "Twig Team", 2044 | "homepage": "http://twig.sensiolabs.org/contributors", 2045 | "role": "Contributors" 2046 | } 2047 | ], 2048 | "description": "Twig, the flexible, fast, and secure template language for PHP", 2049 | "homepage": "http://twig.sensiolabs.org", 2050 | "keywords": [ 2051 | "templating" 2052 | ], 2053 | "time": "2017-09-27T18:10:31+00:00" 2054 | } 2055 | ], 2056 | "packages-dev": [ 2057 | { 2058 | "name": "symfony/dotenv", 2059 | "version": "v4.0.2", 2060 | "source": { 2061 | "type": "git", 2062 | "url": "https://github.com/symfony/dotenv.git", 2063 | "reference": "ffcaeab01e42b0c40669add2aa8e77f79ddb9389" 2064 | }, 2065 | "dist": { 2066 | "type": "zip", 2067 | "url": "https://api.github.com/repos/symfony/dotenv/zipball/ffcaeab01e42b0c40669add2aa8e77f79ddb9389", 2068 | "reference": "ffcaeab01e42b0c40669add2aa8e77f79ddb9389", 2069 | "shasum": "" 2070 | }, 2071 | "require": { 2072 | "php": "^7.1.3" 2073 | }, 2074 | "require-dev": { 2075 | "symfony/process": "~3.4|~4.0" 2076 | }, 2077 | "type": "library", 2078 | "extra": { 2079 | "branch-alias": { 2080 | "dev-master": "4.0-dev" 2081 | } 2082 | }, 2083 | "autoload": { 2084 | "psr-4": { 2085 | "Symfony\\Component\\Dotenv\\": "" 2086 | }, 2087 | "exclude-from-classmap": [ 2088 | "/Tests/" 2089 | ] 2090 | }, 2091 | "notification-url": "https://packagist.org/downloads/", 2092 | "license": [ 2093 | "MIT" 2094 | ], 2095 | "authors": [ 2096 | { 2097 | "name": "Fabien Potencier", 2098 | "email": "fabien@symfony.com" 2099 | }, 2100 | { 2101 | "name": "Symfony Community", 2102 | "homepage": "https://symfony.com/contributors" 2103 | } 2104 | ], 2105 | "description": "Registers environment variables from a .env file", 2106 | "homepage": "https://symfony.com", 2107 | "keywords": [ 2108 | "dotenv", 2109 | "env", 2110 | "environment" 2111 | ], 2112 | "time": "2017-12-08T15:46:13+00:00" 2113 | }, 2114 | { 2115 | "name": "symfony/process", 2116 | "version": "v4.0.3", 2117 | "source": { 2118 | "type": "git", 2119 | "url": "https://github.com/symfony/process.git", 2120 | "reference": "2145b3e8137e463b1051b79440a59b38220944f0" 2121 | }, 2122 | "dist": { 2123 | "type": "zip", 2124 | "url": "https://api.github.com/repos/symfony/process/zipball/2145b3e8137e463b1051b79440a59b38220944f0", 2125 | "reference": "2145b3e8137e463b1051b79440a59b38220944f0", 2126 | "shasum": "" 2127 | }, 2128 | "require": { 2129 | "php": "^7.1.3" 2130 | }, 2131 | "type": "library", 2132 | "extra": { 2133 | "branch-alias": { 2134 | "dev-master": "4.0-dev" 2135 | } 2136 | }, 2137 | "autoload": { 2138 | "psr-4": { 2139 | "Symfony\\Component\\Process\\": "" 2140 | }, 2141 | "exclude-from-classmap": [ 2142 | "/Tests/" 2143 | ] 2144 | }, 2145 | "notification-url": "https://packagist.org/downloads/", 2146 | "license": [ 2147 | "MIT" 2148 | ], 2149 | "authors": [ 2150 | { 2151 | "name": "Fabien Potencier", 2152 | "email": "fabien@symfony.com" 2153 | }, 2154 | { 2155 | "name": "Symfony Community", 2156 | "homepage": "https://symfony.com/contributors" 2157 | } 2158 | ], 2159 | "description": "Symfony Process Component", 2160 | "homepage": "https://symfony.com", 2161 | "time": "2018-01-03T07:38:00+00:00" 2162 | }, 2163 | { 2164 | "name": "symfony/web-server-bundle", 2165 | "version": "v4.0.3", 2166 | "source": { 2167 | "type": "git", 2168 | "url": "https://github.com/symfony/web-server-bundle.git", 2169 | "reference": "20ad52df8164d2eae029e6bb24356956c52380be" 2170 | }, 2171 | "dist": { 2172 | "type": "zip", 2173 | "url": "https://api.github.com/repos/symfony/web-server-bundle/zipball/20ad52df8164d2eae029e6bb24356956c52380be", 2174 | "reference": "20ad52df8164d2eae029e6bb24356956c52380be", 2175 | "shasum": "" 2176 | }, 2177 | "require": { 2178 | "php": "^7.1.3", 2179 | "symfony/config": "~3.4|~4.0", 2180 | "symfony/console": "~3.4|~4.0", 2181 | "symfony/dependency-injection": "~3.4|~4.0", 2182 | "symfony/http-kernel": "~3.4|~4.0", 2183 | "symfony/process": "^3.4.2|^4.0.2" 2184 | }, 2185 | "suggest": { 2186 | "symfony/expression-language": "For using the filter option of the log server.", 2187 | "symfony/monolog-bridge": "For using the log server." 2188 | }, 2189 | "type": "symfony-bundle", 2190 | "extra": { 2191 | "branch-alias": { 2192 | "dev-master": "4.0-dev" 2193 | } 2194 | }, 2195 | "autoload": { 2196 | "psr-4": { 2197 | "Symfony\\Bundle\\WebServerBundle\\": "" 2198 | }, 2199 | "exclude-from-classmap": [ 2200 | "/Tests/" 2201 | ] 2202 | }, 2203 | "notification-url": "https://packagist.org/downloads/", 2204 | "license": [ 2205 | "MIT" 2206 | ], 2207 | "authors": [ 2208 | { 2209 | "name": "Fabien Potencier", 2210 | "email": "fabien@symfony.com" 2211 | }, 2212 | { 2213 | "name": "Symfony Community", 2214 | "homepage": "https://symfony.com/contributors" 2215 | } 2216 | ], 2217 | "description": "Symfony WebServerBundle", 2218 | "homepage": "https://symfony.com", 2219 | "time": "2018-01-03T17:15:19+00:00" 2220 | } 2221 | ], 2222 | "aliases": [], 2223 | "minimum-stability": "stable", 2224 | "stability-flags": { 2225 | "symfony/lts": 20 2226 | }, 2227 | "prefer-stable": false, 2228 | "prefer-lowest": false, 2229 | "platform": { 2230 | "php": "^7.1.3", 2231 | "ext-iconv": "*" 2232 | }, 2233 | "platform-dev": [] 2234 | } 2235 | -------------------------------------------------------------------------------- /config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], 6 | Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], 7 | Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true], 8 | ]; 9 | -------------------------------------------------------------------------------- /config/packages/dev/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | strict_requirements: true 4 | -------------------------------------------------------------------------------- /config/packages/framework.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | secret: '%env(APP_SECRET)%' 3 | #default_locale: en 4 | #csrf_protection: ~ 5 | #http_method_override: true 6 | 7 | # uncomment this entire section to enable sessions 8 | #session: 9 | # # With this config, PHP's native session handling is used 10 | # handler_id: ~ 11 | 12 | #esi: ~ 13 | #fragments: ~ 14 | php_errors: 15 | log: true 16 | -------------------------------------------------------------------------------- /config/packages/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | strict_requirements: ~ 4 | -------------------------------------------------------------------------------- /config/packages/test/framework.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: ~ 3 | # Uncomment this section if you're using sessions 4 | #session: 5 | # storage_id: session.storage.mock_file 6 | -------------------------------------------------------------------------------- /config/packages/twig.yaml: -------------------------------------------------------------------------------- 1 | twig: 2 | paths: ['%kernel.project_dir%/templates'] 3 | debug: '%kernel.debug%' 4 | strict_variables: '%kernel.debug%' 5 | -------------------------------------------------------------------------------- /config/routes.yaml: -------------------------------------------------------------------------------- 1 | #index: 2 | # path: / 3 | # controller: App\Controller\DefaultController::index 4 | -------------------------------------------------------------------------------- /config/routes/annotations.yaml: -------------------------------------------------------------------------------- 1 | controllers: 2 | resource: ../../src/Controller/ 3 | type: annotation 4 | -------------------------------------------------------------------------------- /config/routes/dev/twig.yaml: -------------------------------------------------------------------------------- 1 | _errors: 2 | resource: '@TwigBundle/Resources/config/routing/errors.xml' 3 | prefix: /_error 4 | -------------------------------------------------------------------------------- /config/services.yaml: -------------------------------------------------------------------------------- 1 | # Put parameters here that don't need to change on each machine where the app is deployed 2 | # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration 3 | parameters: 4 | 5 | services: 6 | # default configuration for services in *this* file 7 | _defaults: 8 | autowire: true # Automatically injects dependencies in your services. 9 | autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. 10 | public: false # Allows optimizing the container by removing unused services; this also means 11 | # fetching services directly from the container via $container->get() won't work. 12 | # The best practice is to be explicit about your dependencies anyway. 13 | 14 | # makes classes in src/ available to be used as services 15 | # this creates a service per class whose id is the fully-qualified class name 16 | App\: 17 | resource: '../src/*' 18 | exclude: '../src/{Entity,Migrations,Tests}' 19 | 20 | # controllers are imported separately to make sure services can be injected 21 | # as action arguments even if you don't extend any base controller class 22 | App\Controller\: 23 | resource: '../src/Controller' 24 | tags: ['controller.service_arguments'] 25 | 26 | # add more service definitions when explicit configuration is needed 27 | # please note that last definitions always *replace* previous ones 28 | -------------------------------------------------------------------------------- /final-result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zorfling/react-symfony-4-starter/e56c50709e8a12c0a7824c783de1f0ff8c98eb9a/final-result.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "@symfony/webpack-encore": "^0.17.0", 4 | "babel-preset-react": "^6.24.1" 5 | }, 6 | "license": "UNLICENSED", 7 | "private": true, 8 | "scripts": { 9 | "dev-server": "encore dev-server", 10 | "dev": "encore dev", 11 | "watch": "encore dev --watch", 12 | "build": "encore production" 13 | }, 14 | "dependencies": { 15 | "material-ui": "^0.20.0", 16 | "prop-types": "^15.6.0", 17 | "react": "^16.2.0", 18 | "react-dom": "^16.2.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | load(__DIR__.'/../.env'); 16 | } 17 | 18 | if ($_SERVER['APP_DEBUG'] ?? ('prod' !== ($_SERVER['APP_ENV'] ?? 'dev'))) { 19 | umask(0000); 20 | 21 | Debug::enable(); 22 | } 23 | 24 | if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) { 25 | Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); 26 | } 27 | 28 | if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) { 29 | Request::setTrustedHosts(explode(',', $trustedHosts)); 30 | } 31 | 32 | $kernel = new Kernel($_SERVER['APP_ENV'] ?? 'dev', $_SERVER['APP_DEBUG'] ?? ('prod' !== ($_SERVER['APP_ENV'] ?? 'dev'))); 33 | $request = Request::createFromGlobals(); 34 | $response = $kernel->handle($request); 35 | $response->send(); 36 | $kernel->terminate($request, $response); 37 | -------------------------------------------------------------------------------- /src/Controller/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zorfling/react-symfony-4-starter/e56c50709e8a12c0a7824c783de1f0ff8c98eb9a/src/Controller/.gitignore -------------------------------------------------------------------------------- /src/Controller/DefaultController.php: -------------------------------------------------------------------------------- 1 | render('Default/index.html.twig', []); 17 | } 18 | 19 | /** 20 | * @Route("/data", name="data") 21 | */ 22 | public function dataAction() 23 | { 24 | return new JsonResponse([ 25 | [ 26 | 'id' => 1, 27 | 'author' => 'Chris Colborne', 28 | 'avatarUrl' => 'http://1.gravatar.com/avatar/13dbc56733c2cc66fbc698cdb07fec12', 29 | 'title' => 'Bitter Predation', 30 | 'description' => 'Thirteen thin, round towers form an almost perfectly squared barrier around this marvelous castle and are connected by big, thin walls made of light pink stone. Rough windows are scattered thinly around the walls in fairly symmetrical patterns, along with overhanging crenelations for archers and artillery.', 31 | ], 32 | [ 33 | 'id' => 2, 34 | 'author' => 'Louanne Perez', 35 | 'avatarUrl' => 'https://randomuser.me/api/portraits/thumb/women/18.jpg', 36 | 'title' => 'Strangers of the Ambitious', 37 | 'description' => "A huge gate with thick metal doors, a regular bridge and large crenelations offers a warm haven within these cold, isolated landsand it's the only way in, at least to those unfamiliar with the castle and its surroundings.", 38 | ], 39 | [ 40 | 'id' => 3, 41 | 'author' => 'Theodorus Dietvorst', 42 | 'avatarUrl' => 'https://randomuser.me/api/portraits/thumb/men/49.jpg', 43 | 'title' => 'Outsiders of the Mysterious', 44 | 'description' => "Plain fields of a type of grass cover most of the fields outside of the castle, adding to the castle's aesthetics. This castle is relatively new, but so far it stood its ground with ease and it'll likely do so for ages to come.", 45 | ], 46 | ]); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/Kernel.php: -------------------------------------------------------------------------------- 1 | getProjectDir().'/var/cache/'.$this->environment; 20 | } 21 | 22 | public function getLogDir() 23 | { 24 | return $this->getProjectDir().'/var/log'; 25 | } 26 | 27 | public function registerBundles() 28 | { 29 | $contents = require $this->getProjectDir().'/config/bundles.php'; 30 | foreach ($contents as $class => $envs) { 31 | if (isset($envs['all']) || isset($envs[$this->environment])) { 32 | yield new $class(); 33 | } 34 | } 35 | } 36 | 37 | protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader) 38 | { 39 | $container->setParameter('container.autowiring.strict_mode', true); 40 | $container->setParameter('container.dumper.inline_class_loader', true); 41 | $confDir = $this->getProjectDir().'/config'; 42 | $loader->load($confDir.'/packages/*'.self::CONFIG_EXTS, 'glob'); 43 | if (is_dir($confDir.'/packages/'.$this->environment)) { 44 | $loader->load($confDir.'/packages/'.$this->environment.'/**/*'.self::CONFIG_EXTS, 'glob'); 45 | } 46 | $loader->load($confDir.'/services'.self::CONFIG_EXTS, 'glob'); 47 | $loader->load($confDir.'/services_'.$this->environment.self::CONFIG_EXTS, 'glob'); 48 | } 49 | 50 | protected function configureRoutes(RouteCollectionBuilder $routes) 51 | { 52 | $confDir = $this->getProjectDir().'/config'; 53 | if (is_dir($confDir.'/routes/')) { 54 | $routes->import($confDir.'/routes/*'.self::CONFIG_EXTS, '/', 'glob'); 55 | } 56 | if (is_dir($confDir.'/routes/'.$this->environment)) { 57 | $routes->import($confDir.'/routes/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob'); 58 | } 59 | $routes->import($confDir.'/routes'.self::CONFIG_EXTS, '/', 'glob'); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /symfony.lock: -------------------------------------------------------------------------------- 1 | { 2 | "doctrine/annotations": { 3 | "version": "1.0", 4 | "recipe": { 5 | "repo": "github.com/symfony/recipes", 6 | "branch": "master", 7 | "version": "1.0", 8 | "ref": "cb4152ebcadbe620ea2261da1a1c5a9b8cea7672" 9 | } 10 | }, 11 | "doctrine/cache": { 12 | "version": "v1.7.1" 13 | }, 14 | "doctrine/collections": { 15 | "version": "v1.5.0" 16 | }, 17 | "doctrine/common": { 18 | "version": "v2.8.1" 19 | }, 20 | "doctrine/inflector": { 21 | "version": "v1.2.0" 22 | }, 23 | "doctrine/lexer": { 24 | "version": "v1.0.1" 25 | }, 26 | "psr/cache": { 27 | "version": "1.0.1" 28 | }, 29 | "psr/container": { 30 | "version": "1.0.0" 31 | }, 32 | "psr/log": { 33 | "version": "1.0.2" 34 | }, 35 | "psr/simple-cache": { 36 | "version": "1.0.0" 37 | }, 38 | "sensio/framework-extra-bundle": { 39 | "version": "4.0", 40 | "recipe": { 41 | "repo": "github.com/symfony/recipes", 42 | "branch": "master", 43 | "version": "4.0", 44 | "ref": "aaddfdf43cdecd4cf91f992052d76c2cadc04543" 45 | } 46 | }, 47 | "symfony/asset": { 48 | "version": "v4.0.3" 49 | }, 50 | "symfony/cache": { 51 | "version": "v4.0.2" 52 | }, 53 | "symfony/config": { 54 | "version": "v4.0.2" 55 | }, 56 | "symfony/console": { 57 | "version": "3.3", 58 | "recipe": { 59 | "repo": "github.com/symfony/recipes", 60 | "branch": "master", 61 | "version": "3.3", 62 | "ref": "9f94d3ea453cd8a3b95db7f82592d7344fe3a76a" 63 | } 64 | }, 65 | "symfony/debug": { 66 | "version": "v4.0.2" 67 | }, 68 | "symfony/dependency-injection": { 69 | "version": "v4.0.2" 70 | }, 71 | "symfony/dotenv": { 72 | "version": "v4.0.2" 73 | }, 74 | "symfony/event-dispatcher": { 75 | "version": "v4.0.2" 76 | }, 77 | "symfony/filesystem": { 78 | "version": "v4.0.2" 79 | }, 80 | "symfony/finder": { 81 | "version": "v4.0.2" 82 | }, 83 | "symfony/flex": { 84 | "version": "1.0", 85 | "recipe": { 86 | "repo": "github.com/symfony/recipes", 87 | "branch": "master", 88 | "version": "1.0", 89 | "ref": "cc1afd81841db36fbef982fe56b48ade6716fac4" 90 | } 91 | }, 92 | "symfony/framework-bundle": { 93 | "version": "3.3", 94 | "recipe": { 95 | "repo": "github.com/symfony/recipes", 96 | "branch": "master", 97 | "version": "3.3", 98 | "ref": "70e6c7b1c83d975cf1ca40f9685feeb009d70792" 99 | } 100 | }, 101 | "symfony/http-foundation": { 102 | "version": "v4.0.2" 103 | }, 104 | "symfony/http-kernel": { 105 | "version": "v4.0.2" 106 | }, 107 | "symfony/lts": { 108 | "version": "4-dev" 109 | }, 110 | "symfony/polyfill-mbstring": { 111 | "version": "v1.6.0" 112 | }, 113 | "symfony/process": { 114 | "version": "v4.0.3" 115 | }, 116 | "symfony/routing": { 117 | "version": "4.0", 118 | "recipe": { 119 | "repo": "github.com/symfony/recipes", 120 | "branch": "master", 121 | "version": "4.0", 122 | "ref": "cda8b550123383d25827705d05a42acf6819fe4e" 123 | } 124 | }, 125 | "symfony/twig-bridge": { 126 | "version": "v4.0.2" 127 | }, 128 | "symfony/twig-bundle": { 129 | "version": "3.3", 130 | "recipe": { 131 | "repo": "github.com/symfony/recipes", 132 | "branch": "master", 133 | "version": "3.3", 134 | "ref": "f75ac166398e107796ca94cc57fa1edaa06ec47f" 135 | } 136 | }, 137 | "symfony/web-server-bundle": { 138 | "version": "3.3", 139 | "recipe": { 140 | "repo": "github.com/symfony/recipes", 141 | "branch": "master", 142 | "version": "3.3", 143 | "ref": "c72d107d077f1654428edaed69415d0228c1aefe" 144 | } 145 | }, 146 | "symfony/webpack-encore-pack": { 147 | "version": "1.0", 148 | "recipe": { 149 | "repo": "github.com/symfony/recipes", 150 | "branch": "master", 151 | "version": "1.0", 152 | "ref": "a2f276eff6e95ca94be135d2d3e5c1247c6f8807" 153 | } 154 | }, 155 | "symfony/yaml": { 156 | "version": "v4.0.2" 157 | }, 158 | "twig/twig": { 159 | "version": "v2.4.4" 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /templates/Default/index.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'base.html.twig' %} 2 | 3 | {% block body %} 4 |
5 | 6 | {% endblock %} -------------------------------------------------------------------------------- /templates/base.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% block title %}Welcome to React Symfony 4 Starter!{% endblock %} 6 | {% block stylesheets %} 7 | 8 | {% endblock %} 9 | 10 | 11 |
12 |

React Symfony 4 Starter

13 |
14 | {% block body %}{% endblock %} 15 | {% block javascripts %}{% endblock %} 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var Encore = require('@symfony/webpack-encore'); 2 | 3 | Encore 4 | // the project directory where compiled assets will be stored 5 | .setOutputPath('public/build/') 6 | // the public path used by the web server to access the previous directory 7 | .setPublicPath('/build') 8 | .cleanupOutputBeforeBuild() 9 | .enableSourceMaps(!Encore.isProduction()) 10 | .enableVersioning(Encore.isProduction()) 11 | .addEntry('app', './assets/js/app.js') 12 | .enableReactPreset(); 13 | 14 | module.exports = Encore.getWebpackConfig(); 15 | --------------------------------------------------------------------------------