Visitar URL original
Create config collection in a mockable method by aschempp · Pull Request #5 · contao/core-bundle · GitHub
Skip to content

Create config collection in a mockable method - #5

Merged
leofeyer merged 3 commits into
contao:feature/symfony2from
aschempp:feature/mockabel-config
Oct 28, 2014
Merged

leofeyer merged 3 commits into
contao:feature/symfony2from
aschempp:feature/mockabel-config

Conversation

@aschempp

Copy link
Copy Markdown
Member

No description provided.

@leofeyer
leofeyer merged commit 4bf51c1 into contao:feature/symfony2 Oct 28, 2014
@leofeyer leofeyer added this to the 4.0.0 milestone Oct 28, 2014
@aschempp
aschempp deleted the feature/mockabel-config branch October 28, 2014 13:09
leofeyer pushed a commit that referenced this pull request Aug 26, 2016
leofeyer pushed a commit that referenced this pull request Nov 1, 2019
…es command (see #866)

Description
-----------

Together with @Toflar we had a hard time debugging why the `contao:resize-images` command stopped at some point and did not want to continue. The error message was quite unclear especially that the requested file existed:

```
6/77b26349-9084f1ba.jpg......... failed
Unable to open image /var/www/vhosts/domain.tld/httpdocs/releases/233/assets/images/../../var/pim-images/77b26349.jpg
```

So we decided to introduce an option that allows to output more verbose error message simply by executing command in verbose mode `contao:resize-images -v`:

```
f/8ac5c4ec-213df40b.jpg.............. failed

 [ERROR] ImagickException: cache resources exhausted
         `/var/www/vhosts/domain.tld/httpdocs/releases/233/assets/images/../../var/pim-images/8ac5c4ec.jpg' @
         error/cache.c/OpenPixelCache/3864 in
         /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/imagine/imagine/src/Imagick/Imagine.php:69
         Stack trace:
         #0 /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/imagine/imagine/src/Imagick/Imagine.php(69):
         Imagick->__construct('/var/www/vhosts...')
         #1 /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/contao/image/src/Resizer.php(93):
         Imagine\Imagick\Imagine->open('/var/www/vhosts...')
         #2 /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/contao/image/src/DeferredResizer.php(185):
         Contao\Image\Resizer->executeResize(Object(Contao\Image\Image), Object(Contao\Image\ResizeCoordinates),
         '/var/www/vhosts...', Object(Contao\Image\ResizeOptions))
         #3 /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/contao/image/src/DeferredResizer.php(108):
         Contao\Image\DeferredResizer->executeDeferredResize('f/8ac5c4ec-213d...', Array,
         Object(Imagine\Imagick\Imagine))
         #4
         /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/contao/core-bundle/src/Command/ResizeImagesComma
         nd.php(189): Contao\Image\DeferredResizer->resizeDeferredImage(Object(Contao\Image\DeferredImage), false)
         #5
         /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/contao/core-bundle/src/Command/ResizeImagesComma
         nd.php(166): Contao\CoreBundle\Command\ResizeImagesCommand->resizeImage('f/8ac5c4ec-213d...',
         Object(Symfony\Component\Console\Style\SymfonyStyle))
         #6 /var/www/vhosts/domain.tld/httpdocs/releases/233/vendor/symfony/console/Command/Command.php(255):
```

Commits
-------

e9c6de99 Allow to output more verbose error messages in contao:resize-images command
leofeyer pushed a commit that referenced this pull request Aug 4, 2020
Description
-----------

With @Toflar we have discovered by accident that if a URL is double-encoded (for some reason, doesn't matter) the Contao's `RouteProvider` will eventually throw an error trying to query a database.

```
URL original: drachenlochmuseum-v%25c3%25a4ttis.html
URL decoded: drachenlochmuseum-v%c3%a4ttis.html
URL decoded 2nd time: drachenlochmuseum-vättis.html
```

The decoded URL is used in the database query and that fails because the database driver would like to replace wildcards `%c` with parameters that were not provided.

Stack trace:

```
Exception: Too few arguments to build the query string
#27 vendor/contao/core-bundle/src/Resources/contao/library/Contao/Database/Statement.php(304): replaceWildcards
#26 vendor/contao/core-bundle/src/Resources/contao/library/Contao/Database/Statement.php(249): execute
#25 vendor/contao/core-bundle/src/Resources/contao/library/Contao/Model.php(1102): find
#24 vendor/contao/core-bundle/src/Resources/contao/library/Contao/Model.php(973): findBy
#23 vendor/contao/core-bundle/src/Framework/Adapter.php(38): __call
#22 vendor/contao/core-bundle/src/Routing/RouteProvider.php(493): findPages
#21 vendor/contao/core-bundle/src/Routing/RouteProvider.php(88): getRouteCollectionForRequest
#20 vendor/contao/core-bundle/src/Routing/LegacyRouteProvider.php(43): getRouteCollectionForRequest
#19 vendor/symfony-cmf/routing/src/NestedMatcher/NestedMatcher.php(141): matchRequest
#18 vendor/contao/core-bundle/src/Routing/Matcher/LegacyMatcher.php(69): matchRequest
#17 vendor/symfony-cmf/routing/src/DynamicRouter.php(271): matchRequest
#16 vendor/symfony-cmf/routing/src/ChainRouter.php(188): doMatch
#15 vendor/symfony-cmf/routing/src/ChainRouter.php(158): matchRequest
#14 vendor/symfony/http-kernel/EventListener/RouterListener.php(115): onKernelRequest
#13 vendor/symfony/event-dispatcher/EventDispatcher.php(212): doDispatch
#12 vendor/symfony/event-dispatcher/EventDispatcher.php(44): dispatch
#11 vendor/symfony/http-kernel/HttpKernel.php(126): handleRaw
#10 vendor/symfony/http-kernel/HttpKernel.php(67): handle
#9 vendor/symfony/http-kernel/Kernel.php(198): handle
#8 vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php(85): handle
#7 vendor/symfony/http-kernel/HttpCache/HttpCache.php(448): forward
#6 vendor/symfony/framework-bundle/HttpCache/HttpCache.php(57): forward
#5 vendor/symfony/http-kernel/HttpCache/HttpCache.php(420): fetch
#4 vendor/contao/manager-bundle/src/HttpKernel/ContaoCache.php(46): fetch
#3 vendor/symfony/http-kernel/HttpCache/HttpCache.php(317): lookup
#2 vendor/symfony/http-kernel/HttpCache/HttpCache.php(192): handle
#1 vendor/friendsofsymfony/http-cache/src/SymfonyCache/EventDispatchingHttpCache.php(98): handle
#0 web/app.php(58): null
```

Commits
-------

8ae25820 Fix a potential error if the URL has percentage in it
8caaf252 Fix unit tests
509f7624 Correctly encode the page aliases
leofeyer pushed a commit that referenced this pull request Jun 14, 2021
Description
-----------

Alternative approach for response context as discussed in Core team call.
I guess there's no point in explaining it all here - I'll just document the final iteration once everything is done in the Contao dev docs ^^

Commits
-------

205dafc7 Reworked response context concept
786b50ca Merge branch '4.x' into feature/response-context-rework
4d1cf189 CS
d2151bb4 Fixed tests
aae10917 Implemented removing existing services and added support for interfaces
0a83cbe4 Added psalm docs
5f27ffce Make HtmlHeadBag final
5e75e386 CS
950e9bbe Also consider parent classes as aliases
fbe8206c Going back to a regular array and removed the remove() method
41b1c60f Added support for lazy services
8a35bc96 Fixed tests
0d7f8d93 CS

Co-authored-by: Leo Feyer <github@contao.org>
5b9706c4 Added failing test to show class issue
d37a2237 Merge pull request #4 from aschempp/feature/response-context-rework

Added failing test to show class issue
f0a1f353 Removed irrelevant assertion
1d29c95c Fixed tests
6399cc78 Cleanup
12556327 Fixed phpstan
6a1eebc4 CS
e90daf48 Added failing test to show alias being overridden
a5c95893 Merge pull request #5 from aschempp/feature/response-context-rework

Added failing test to show alias being overridden
1cb74c7a Fixed tests
84af804d Removed leftover
62cb0af1 CS
leofeyer added a commit that referenced this pull request Jun 24, 2022
Description
-----------

-

Commits
-------

18f27e2f Get rid of the base tag
50c2f91e Also adjust the AssetListener
e70e6e25 Update the UPGRADE.md file
1db8ad0e Remove the File::getFullPath() method again
a6c2d2ae Add the base tag in the front end again
7de8805f Automatically add and remove `{{env::path}}` to relative links in Tin…
6a5804c7 Use Environment::get('path') in the legacy code
6b5f6355 Add the BasePathPrefixer service
0e1562c4 Use the asset() function in the code.html.twig template
be5de2ca Apply suggestions from code review
8f051c7e Fix the tests
80230812 Use requestUri instead of request
a8bab4d6 Fix the Controller::addToUrl() method
11a79b50 Fix a leftover
cfebc2a4 Prevent the "creation of dynamic property" warning
fbf057a3 Use "env::base_path" instead of "env::path"
ae3483a3 Use "requestUri" instead of "indexFreeRequest"
c287ec75 Add the base_path_prefixer to the "file" insert tag
757f9bfb Do not prefix the URL in redirect exceptions
a5e1ee44 Remove two redundant test methods
29bcd8cc Fix some base URL bugs (see #5)
dde96863 Use app.request.basePath instead of the asset() function
8ff5f084 Fix the tests
66a6b6ed Use the assets.context instead of a custom service
38a46105 Use the asset() method in the code.html.twig template
9b72d6b3 Fix the tests
beefd787 Also prefix the image URL and the redirect URL
ee7e745d Add the Validator::isRelativeUrl() method
f76053c1 Use "contao.assets.files_context" for file URLs
154fb126 Fix the URL in the file insert tag
a94dc2fe Remove the deprecation and add the "title" field again
3832d246 Revert the ce_player.html5 changes

Co-authored-by: Martin Auswöger <martin@auswoeger.com>
leofeyer added a commit that referenced this pull request Jan 26, 2023
Description
-----------

Closes #5712 

Commits
-------

7a58d3d1 allow the teaser to be null (and therefore "not in the model", see #5…
a33800b4 CS

Co-authored-by: Leo Feyer <1192057+leofeyer@users.noreply.github.com>
leofeyer added a commit that referenced this pull request Jan 16, 2024
Description
-----------

This introduces the ability to define Content Security Policies for the front end. There will be new settings for each
website root:

<img src="https://github.com/contao/contao/assets/4970961/abf4bad8-f025-4cb0-be82-c3088c68c1fc" width="898">

Within the _Content Security Policy_ field you can define your policies - with the exakt same syntax as the 
`Content-Security-Policy` header. For example `default-src 'self'` will tell the browser to only accept resources from
the same domain and not allow any inline styles or scripts at all (at least not without nonces).

Once a policy for `default-src`, `script-src` or `style-src` is set [1], Contao will automatically generate nonces for 
the respective `<script>` and `<style>` elements, at least in supported templates. If you have any custom templates
with these tags, then you will need to adjust your template to include the nonce, which is pretty simple:

```twig
<script nonce="{{ contao_csp_nonce('script-src') }}">
```


```php
<script nonce="<?= $this->nonce('script-src') ?>">
```

In this PR the `nonce` attribute is added conditionally everywhere, i.e. the attribute will not be set, if no nonce was 
necessary and thus no nonce was generated. So there will not be empty `nonce` attributes in the HTML code (though it
would be fine).


## Allowing Specific Sources Dynamically

Some content elements like the video, YouTube and Vimeo players dynamically allow their respective sources. This can be
done directly from within the templates:

```twig
{% do add_csp_source('frame-src', iframe_attrs.src) %}
```

```php
<?php $this->addCspSource('frame-src', $this->src); ?>
```

So even if you set the policies `frame-src 'self'; media-src 'none'` these content elements will still work as they
dynamically allow their specific sources.


## Reporting

In the CSP spec you also have the possibility to set a reporting URL. If the browser detects a CSP violation it will
then automatically `POST` a report to that URL. Reporting needs to be specifically enabled in the website root. These reports will then also show up in the system log:

<img src="https://github.com/contao/contao/assets/4970961/3ce826f7-48e3-4586-b28a-bdbabda9a765" width="879">

The system log entry will tell you which policy was violated and on which line. The detailed information will contain
the original URL of the violation.

This is of course a public API endpoint where anyone or anything can send any data. As such this needs to be handled 
with care. This PR uses the `ContentSecurityPolicyController` of `nelmio/security-bundle` which has the ability to 
filter out "noise". But instead of using that controller directly this PR implements its own controller and injects the service of Nelmio's controller. Our route always requires a valid page ID and always checks whether the current page's root has reporting enabled. If not, it will respond with 404 - otherwise it will forward the request to the `ContentSecurityPolicyController` of `nelmio/security-bundle`.


## Twig Components

This PR introduces two new Twig components: `_style` and `_script`. When using them you do not have to think about having to check for nonces as the component does this automatically for you. However, I find that using these components makes the templates less readable - as there will also be no syntax highlighting by your editor anymore, since it won't know that the content of the component block is within a `<script>` or `<style>` tag.


## Thoughts, Decisions, Caveats

Initially I thought may be Contao should set some sensible defaults automatically and also automatically allow the
`staticFiles` and `staticPlugins` domains. However, this approach can be difficult and flawed. Contao cannot know in
advance what kind of sources are hosted on its current and any of the static domains, thus we cannot set any `-src`
policies (we would have to set all of them). It needs to be solely up to the administrator to set appropriate policies.

One exception could be iframe sources, which could be automatically added (see above). However, allowing specific 
sources dynamically also has a caveat. Let's take the YouTube content element for example: on the page where such a 
content element is added, the Content-Security-Policy will automatically be the following [2]:

```
frame-src https://www.youtube.com/embed/abc123
```

However, this will also mean that _no other iframes_ will be allowed on the same page, whereas without this content
element they would be. We could change the helper functions to not add the directive if no existing (or `default-src`
directive) is already present. Unfortunately the `CSPBuilder` has no such API at the moment.

Further comments about the code will be down below in threads. PR is still a draft due to missing tests.


## Footnotes

* [1]: ~If you _only_ set a `default-src` policy no nonces will be generated currently unfortunately due to an oversight
in `paragonie/csp-builder` (see paragonie/csp-builder#65 not relevant after overhaul
* [2]: ~Actually it will be only `child-src` without legacy browser support enabled 
(see paragonie/csp-builder#76 not relevant after overhaul

Commits
-------

6a342198 add CSP
967f1aec fix line endings
6b363506 merge with 5.x
014c8e61 cs fix
a008dce0 Merge remote-tracking branch 'origin/5.x' into csp
07de412a update dependencies
24733099 introduce script component
4ce5d5d2 mvp
b211d7ff add style component
0ec67380 remove unnecessary scopes
9b7dbc48 move templates to new location
9bdbf32f Merge remote-tracking branch 'origin/5.x' into csp
420bf35b add accidental removal
0fa2265f improve the implementation
613368c0 remove parameter definition
7c86310e remove getNonce method
7432de8c Merge remote-tracking branch 'origin/5.x' into csp
fe45eed8 validate CSP
a7466d68 fix toolbar
a0f8ef9a fix toolbar yet again
c9505ebf consolidate CspRuntime and fix absolute source paths
99ac12a6 fix reporting
24e56f17 only add nonce if necessary
9029d318 remove unrelated change
1274da87 code style
87017e58 add tests
05f71411 fix service name
ae8faa5b revert changes to stylesheet component
067dfcee satisfy PHP stan
ee4a5429 update test
db52a549 fix ci
4a52f508 increase nelmio/security-bundle requirements
2767dd3f Merge remote-tracking branch 'origin/5.x' into csp
2e312ca2 update csp-builder and security-bundle requirements, satisfy PHP stan
9131551a merge with 5.x
bda5f212 overhaul
67cd1a6e fix test
f365461d merge with 5.x
2598948c fix accidental öö
0fc5c615 Update core-bundle/contao/templates/twig/component/_script.html.twig
ba71e550 fix _style.html.twig
13715f08 do not use any legacy CPS headers
ccf927de change exception message
af9a9db8 fix test
4510a924 move to private function
13b3c2af allow to enable report logging in website root
8356ac42 remove remnant config
c7272219 add comment
4cffecfc fix prefer lowest
6e8538e0 code style
ad61e359 fix functional tests differently
8d0bd318 remove remnant
a0f2e745 fix another remnant
0ceea3f5 restore previous response context finalisation
b7cae39e merge with 5.x
a9fdea85 use textarea for csp field
20a5e7fd Apply suggestions from code review
7056144e move addCspSource to bottom
76082c7c merge with 5.x
e90cb34b do not call nonce statically
482cebdf do not print line number if none given
4b835280 code style
35e1f6ef Reuse HtmlAttributes (#5)
dceaf2bd Merge remote-tracking branch 'origin/5.x' into csp
9d2459b9 fix test
dbac1d6c implement fallback logic for addSource
43ce8056 add more tests
f745ea2c fix accidental change
1874f78f set default-src 'self' as default policy
b885a675 fix errors in inline generation
a9f7b3b8 add Model annotations
40608d7c Merge remote-tracking branch 'origin/5.x' into csp
23a441d9 change translation
335d2777 Merge remote-tracking branch 'origin/5.x' into csp
4fdd33f5 remove _script and _style components
27d55170 Merge remote-tracking branch 'origin/5.x' into csp
e0c27ebb remove comma
5f2fcb33 Fix the templates and the CI chain
0503587f Adjust the palettes
b1766b6a Merge remote-tracking branch 'origin/5.x' into csp
25ad7c70 make tl_page.csp mandatory
8f892e0e always use 'document-uri' and always set an URL
284ed0cd fix test

Co-authored-by: Toflar <yanick.witschi@terminal42.ch>
Co-authored-by: leofeyer <1192057+leofeyer@users.noreply.github.com>
leofeyer pushed a commit that referenced this pull request May 29, 2024
… #7248)

Description
-----------

If a `tl_article` record still contains `keywords` from previous Contao versions and you reference this article in an `article` content element, the following warning will appear in the back end:

```
ErrorException: Warning: Undefined global variable $TL_KEYWORDS
#24 /vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php(207): Contao\ModuleArticle::compile
#23 /vendor/contao/core-bundle/src/Resources/contao/modules/Module.php(214): Contao\Module::generate
#22 /vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php(70): Contao\ModuleArticle::generate
#21 /vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php(550): Contao\Controller::getArticle
#20 /vendor/contao/core-bundle/src/Resources/contao/elements/ContentArticle.php(30): Contao\ContentArticle::generate
#19 /vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php(622): Contao\Controller::getContentElement
#18 /var/cache/prod/contao/dca/tl_content.php(318): tl_content::addCteType
#17 /vendor/contao/core-bundle/src/Resources/contao/drivers/DC_Table.php(4717): Contao\DC_Table::parentView
#16 /vendor/contao/core-bundle/src/Resources/contao/drivers/DC_Table.php(313): Contao\DC_Table::showAll
#15 /vendor/contao/core-bundle/src/Resources/contao/classes/Backend.php(667): Contao\Backend::getBackendModule
#14 /vendor/contao/core-bundle/src/Resources/contao/controllers/BackendMain.php(168): Contao\BackendMain::run
#13 /vendor/contao/core-bundle/src/Controller/BackendController.php(49): Contao\CoreBundle\Controller\BackendController::mainAction
#12 /vendor/symfony/http-kernel/HttpKernel.php(163): Symfony\Component\HttpKernel\HttpKernel::handleRaw
#11 /vendor/symfony/http-kernel/HttpKernel.php(75): Symfony\Component\HttpKernel\HttpKernel::handle
#10 /vendor/symfony/http-kernel/Kernel.php(202): Symfony\Component\HttpKernel\Kernel::handle
#9 /vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php(86): Symfony\Component\HttpKernel\HttpCache\SubRequestHandler::handle
#8 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(481): Symfony\Component\HttpKernel\HttpCache\HttpCache::forward
#7 /vendor/symfony/framework-bundle/HttpCache/HttpCache.php(73): Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache::forward
#6 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(454): Symfony\Component\HttpKernel\HttpCache\HttpCache::fetch
#5 /vendor/contao/manager-bundle/src/HttpKernel/ContaoCache.php(66): Contao\ManagerBundle\HttpKernel\ContaoCache::fetch
#4 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(348): Symfony\Component\HttpKernel\HttpCache\HttpCache::lookup
#3 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(226): Symfony\Component\HttpKernel\HttpCache\HttpCache::handle
#2 /vendor/friendsofsymfony/http-cache/src/SymfonyCache/EventDispatchingHttpCache.php(96): Contao\ManagerBundle\HttpKernel\ContaoCache::handle
#1 /web/index.php(44): require
#0 /web/app.php(13): null
```

This is because `$GLOBALS['TL_KEYWORDS']` is only initialised in the front end within `PageRegular::prepare()`. This PR simply ignores it if not set.

Commits
-------

e54dc2b8 fix warning when legacy keywords are present
leofeyer pushed a commit that referenced this pull request Jun 7, 2024
…#7268)

Description
-----------

Got this erro in my logs:

```
RuntimeException: The Symfony container is not available, did you initialize the Contao framework? in vendor/contao/core-bundle/contao/library/Contao/System.php:143 Stack trace:
#0 vendor/contao/core-bundle/contao/library/Contao/System.php(97): Contao\System->import('Contao\\Config', 'Config')
#1 vendor/contao/core-bundle/contao/library/Contao/DcaExtractor.php(105): Contao\System->__construct()
#2 vendor/contao/core-bundle/contao/library/Contao/DcaExtractor.php(140): Contao\DcaExtractor->__construct('tl_opt_in')
#3 vendor/contao/core-bundle/contao/library/Contao/Model.php(291): Contao\DcaExtractor::getInstance('tl_opt_in')
#4 vendor/contao/core-bundle/contao/library/Contao/Model.php(1084): Contao\Model::getUniqueFields()
#5 vendor/contao/core-bundle/contao/models/OptInModel.php(87): Contao\Model::findBy(Array, 1716888783, Array)
#6 vendor/contao/core-bundle/src/Framework/Adapter.php(38): Contao\OptInModel::findExpiredTokens()
#7 vendor/contao/core-bundle/src/OptIn/OptIn.php(76): Contao\CoreBundle\Framework\Adapter->__call('findExpiredToke...', Array)
#8 vendor/contao/core-bundle/src/Cron/PurgeOptInTokensCron.php(30): Contao\CoreBundle\OptIn\OptIn->purgeTokens()
#9 vendor/contao/core-bundle/src/Cron/CronJob.php(44): Contao\CoreBundle\Cron\PurgeOptInTokensCron->__invoke('cli')
#10 vendor/contao/core-bundle/src/Cron/Cron.php(197): Contao\CoreBundle\Cron\CronJob->__invoke('cli')
#11 vendor/contao/core-bundle/src/Cron/Cron.php(182): Contao\CoreBundle\Cron\Cron->executeCrons(Array, 'cli', Object(Closure))
#12 vendor/contao/core-bundle/src/Cron/Cron.php(97): Contao\CoreBundle\Cron\Cron->doRun(Array, 'cli', false)
#13 vendor/contao/core-bundle/src/Command/CronCommand.php(53): Contao\CoreBundle\Cron\Cron->run('cli', false)
#14 vendor/symfony/console/Command/Command.php(326): Contao\CoreBundle\Command\CronCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 vendor/symfony/console/Application.php(1096): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 vendor/symfony/framework-bundle/Console/Application.php(126): Symfony\Component\Console\Application->doRunCommand(Object(Contao\CoreBundle\Command\CronCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 vendor/symfony/console/Application.php(324): Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand(Object(Contao\CoreBundle\Command\CronCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 vendor/symfony/framework-bundle/Console/Application.php(80): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 vendor/symfony/console/Application.php(175): Symfony\Bundle\FrameworkBundle\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 vendor/contao/manager-bundle/bin/contao-console(40): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput))
#21 vendor/bin/contao-console(119):  #22
```

Commits
-------

9ee76a07 Initialize the Contao framework when working with opt-in tokens
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants