"development-disable" returns error if cached-config-file does not exist
lowtower opened this issue · 21 comments
The script development-disable
returns an error if the cached config doesn't exist.
With the script development-enable
the cached file, e.g. data/config-cache.php
is deleted successfully.
Now, when returning back to development-disable
the file is missing and the script returns with an error:
Script zf-development-mode disable handling the the development-disable event returned with error code 255
If I generate the file manually again, it works fine again without error.
Cheers,
LT.
I'm guessing you are using Expressive?
Did you change the code in /config/config.php
and if so can you show that code?
Have you tried using this with composer? composer run development-disable
Thanks for looking at this!
Yep, I am using expressive!
I haven't changed the code in config/config.php
.
I have tried composer run development-disable
without success!
Here is my config/config.php
:
<?php
use Zend\ConfigAggregator\ArrayProvider;
use Zend\ConfigAggregator\ConfigAggregator;
use Zend\ConfigAggregator\PhpFileProvider;
// To enable or disable caching, set the `ConfigAggregator::ENABLE_CACHE` boolean in
// `config/autoload/local.php`.
$cacheConfig = [
'config_cache_path' => 'data/config-cache.php',
];
$aggregator = new ConfigAggregator([
\ZfTable\ConfigProvider::class,
\Zend\Cache\ConfigProvider::class,
\Zend\Paginator\ConfigProvider::class,
\Zend\Form\ConfigProvider::class,
\Zend\InputFilter\ConfigProvider::class,
\Zend\Filter\ConfigProvider::class,
\Zend\Hydrator\ConfigProvider::class,
\Zend\Validator\ConfigProvider::class,
// Include cache configuration
new ArrayProvider($cacheConfig),
// Default App module config
App\ConfigProvider::class,
// Load application config in a pre-defined order in such a way that local settings
// overwrite global settings. (Loaded as first to last):
// - `global.php`
// - `*.global.php`
// - `local.php`
// - `*.local.php`
new PhpFileProvider('config/autoload/{{,*.}global,{,*.}local}.php'),
// Load development config if it exists
new PhpFileProvider('config/development.config.php'),
], $cacheConfig['config_cache_path']);
// var_export($aggregator->getMergedConfig());
return $aggregator->getMergedConfig();
That code looks ok. I've gone through all the steps in that command and don't see any reason why it should fail if that file doesn't exist. It actually checks for the file and if it doesn't exists, it returns silently.
Something else is going wrong there but I can't reproduce it. I guess the only way is, if you have time, to hack into the source code, add some debug output and figure out where exactly it fails.
I have copied my files to a different environment and everything is fine.
Nevertheless, I will look at it a bit deeper and report here if I have some time.
Hello xtreamwayz ,
I have had a quick glance on this topic.
If I comment out the manually added ConfigProviders
everything is fine.
As soon as one additional (not \Zend\*\ConfigProvider::class
) is added, the development-disable script doesn't work.
I have checked, that data/config-cache.php
contains the content of the manually added ConfigProviders
.
Do You know, what the error code 255 does mean?
Cheers,
LT.
I've tried to reproduce locally, using the following:
- New Expressive installation.
- Created a new module, using
../vendor/bin/expressive module:create
. This adds a newConfigProvider
for the new module. - Called
composer development-disable
.
I had no issues whatsoever. What OS are you using? I'm wondering if there's a path separator issue occurring; are you on Windows by any chance?
No,
it's Linux 3.2.0-4-amd64 SMP Debian 3.2.73-2+deb7u2 x86_64
Which PHP version? What Composer version?
PHP Version 7.1.2
Composer 1.4.1
- I commented out the manually added
ConfigProviders
- I add a new module by
vendor/bin/expressive module:create
- everything is fine
- I comment one additional
ConfigProvider
in- it doesn't work anymore
I comment one additional ConfigProvider in
What do you mean here, exactly?
- Are you commenting out a config provider entry?
- Are you adding one? If so, does the class exist?
Additionally, I need a little more information to diagnose, as I still cannot re-create the issue:
- Does the file
data/config-cache.php
exist? If so, what are its contents? - Can you cut-and-paste the command you are using, and the exact output it provides?
With comment in
I mean that I remove the comment character in the first column ;-)
Okay,
I try to re-create the issue and describe it here:
- I go back to the starting point where everything was okay (based on the zend-expressive-skeleton):
config/config.php
:
<?php
use Zend\ConfigAggregator\ArrayProvider;
use Zend\ConfigAggregator\ConfigAggregator;
use Zend\ConfigAggregator\PhpFileProvider;
// To enable or disable caching, set the `ConfigAggregator::ENABLE_CACHE` boolean in
// `config/autoload/local.php`.
$cacheConfig = [
'config_cache_path' => 'data/config-cache.php',
];
$aggregator = new ConfigAggregator([
\Zend\I18n\ConfigProvider::class,
\Zend\Form\ConfigProvider::class,
\Zend\InputFilter\ConfigProvider::class,
\Zend\Filter\ConfigProvider::class,
\Zend\Validator\ConfigProvider::class,
\Zend\Hydrator\ConfigProvider::class,
\Zend\Db\ConfigProvider::class,
// Include cache configuration
new ArrayProvider($cacheConfig),
// Load application config in a pre-defined order in such a way that local settings
// overwrite global settings. (Loaded as first to last):
// - `global.php`
// - `*.global.php`
// - `local.php`
// - `*.local.php`
new PhpFileProvider('config/autoload/{{,*.}global,{,*.}local}.php'),
// Load development config if it exists
new PhpFileProvider('config/development.config.php'),
], $cacheConfig['config_cache_path']);
return $aggregator->getMergedConfig();
$ composer development-disable
the file data/config-cache.php
does exist - okay!
- Now I create a new module
App
by creating the directories and files manually
$ mkdir -p /src/App/src
$ touch /src/App/src/ConfigProvider.php
This is the content of /src/App/src/ConfigProvider.php
:
<?php
namespace App;
class ConfigProvider
{
public function __invoke() : array
{
return [];
}
}
$ composer development-enable
the file data/config-cache.php
does NOT exist - okay!
$ composer development-disable
the file data/config-cache.php
does exist - okay:
<?php
/**
* This configuration cache file was generated by Zend\ConfigAggregator\ConfigAggregator
* at 2017-04-13T07:45:54+02:00
*/
return array (
'dependencies' =>
array (
'aliases' =>
array (
'TranslatorPluginManager' => 'Zend\\I18n\\Translator\\LoaderPluginManager',
'Zend\\Form\\Annotation\\FormAnnotationBuilder' => 'FormAnnotationBuilder',
'Zend\\Form\\Annotation\\AnnotationBuilder' => 'FormAnnotationBuilder',
'Zend\\Form\\FormElementManager' => 'FormElementManager',
'Zend\\Db\\Adapter\\Adapter' => 'Zend\\Db\\Adapter\\AdapterInterface',
'Zend\\Expressive\\Delegate\\DefaultDelegate' => 'Zend\\Expressive\\Delegate\\NotFoundDelegate',
),
'factories' =>
array (
'Zend\\I18n\\Translator\\TranslatorInterface' => 'Zend\\I18n\\Translator\\TranslatorServiceFactory',
'Zend\\I18n\\Translator\\LoaderPluginManager' => 'Zend\\I18n\\Translator\\LoaderPluginManagerFactory',
'FormAnnotationBuilder' => 'Zend\\Form\\Annotation\\AnnotationBuilderFactory',
'FormElementManager' => 'Zend\\Form\\FormElementManagerFactory',
'InputFilterManager' => 'Zend\\InputFilter\\InputFilterPluginManagerFactory',
'FilterManager' => 'Zend\\Filter\\FilterPluginManagerFactory',
'ValidatorManager' => 'Zend\\Validator\\ValidatorPluginManagerFactory',
'HydratorManager' => 'Zend\\Hydrator\\HydratorPluginManagerFactory',
'Zend\\Db\\Adapter\\AdapterInterface' => 'Zend\\Db\\Adapter\\AdapterServiceFactory',
'Zend\\Expressive\\Application' => 'Zend\\Expressive\\Container\\ApplicationFactory',
'Zend\\Expressive\\Delegate\\NotFoundDelegate' => 'Zend\\Expressive\\Container\\NotFoundDelegateFactory',
'Zend\\Expressive\\Helper\\ServerUrlMiddleware' => 'Zend\\Expressive\\Helper\\ServerUrlMiddlewareFactory',
'Zend\\Expressive\\Helper\\UrlHelper' => 'Zend\\Expressive\\Helper\\UrlHelperFactory',
'Zend\\Expressive\\Helper\\UrlHelperMiddleware' => 'Zend\\Expressive\\Helper\\UrlHelperMiddlewareFactory',
'Zend\\Stratigility\\Middleware\\ErrorHandler' => 'Zend\\Expressive\\Container\\ErrorHandlerFactory',
'Zend\\Expressive\\Middleware\\ErrorResponseGenerator' => 'Zend\\Expressive\\Container\\ErrorResponseGeneratorFactory',
'Zend\\Expressive\\Middleware\\NotFoundHandler' => 'Zend\\Expressive\\Container\\NotFoundHandlerFactory',
'Zend\\Expressive\\Template\\TemplateRendererInterface' => 'Zend\\Expressive\\ZendView\\ZendViewRendererFactory',
'Zend\\View\\HelperPluginManager' => 'Zend\\Expressive\\ZendView\\HelperPluginManagerFactory',
),
'abstract_factories' =>
array (
0 => 'Zend\\Form\\FormAbstractServiceFactory',
1 => 'Zend\\InputFilter\\InputFilterAbstractServiceFactory',
2 => 'Zend\\Db\\Adapter\\AdapterAbstractServiceFactory',
),
'invokables' =>
array (
'Zend\\Expressive\\Helper\\ServerUrlHelper' => 'Zend\\Expressive\\Helper\\ServerUrlHelper',
'Zend\\Expressive\\Router\\RouterInterface' => 'Zend\\Expressive\\Router\\FastRouteRouter',
),
),
'filters' =>
array (
'aliases' =>
array (
'alnum' => 'Zend\\I18n\\Filter\\Alnum',
'Alnum' => 'Zend\\I18n\\Filter\\Alnum',
'alpha' => 'Zend\\I18n\\Filter\\Alpha',
'Alpha' => 'Zend\\I18n\\Filter\\Alpha',
'numberformat' => 'Zend\\I18n\\Filter\\NumberFormat',
'numberFormat' => 'Zend\\I18n\\Filter\\NumberFormat',
'NumberFormat' => 'Zend\\I18n\\Filter\\NumberFormat',
'numberparse' => 'Zend\\I18n\\Filter\\NumberParse',
'numberParse' => 'Zend\\I18n\\Filter\\NumberParse',
'NumberParse' => 'Zend\\I18n\\Filter\\NumberParse',
),
'factories' =>
array (
'Zend\\I18n\\Filter\\Alnum' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Filter\\Alpha' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Filter\\NumberFormat' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Filter\\NumberParse' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
),
),
'validators' =>
array (
'aliases' =>
array (
'alnum' => 'Zend\\I18n\\Validator\\Alnum',
'Alnum' => 'Zend\\I18n\\Validator\\Alnum',
'alpha' => 'Zend\\I18n\\Validator\\Alpha',
'Alpha' => 'Zend\\I18n\\Validator\\Alpha',
'datetime' => 'Zend\\I18n\\Validator\\DateTime',
'dateTime' => 'Zend\\I18n\\Validator\\DateTime',
'DateTime' => 'Zend\\I18n\\Validator\\DateTime',
'float' => 'Zend\\I18n\\Validator\\IsFloat',
'Float' => 'Zend\\I18n\\Validator\\IsFloat',
'int' => 'Zend\\I18n\\Validator\\IsInt',
'Int' => 'Zend\\I18n\\Validator\\IsInt',
'isfloat' => 'Zend\\I18n\\Validator\\IsFloat',
'isFloat' => 'Zend\\I18n\\Validator\\IsFloat',
'IsFloat' => 'Zend\\I18n\\Validator\\IsFloat',
'isint' => 'Zend\\I18n\\Validator\\IsInt',
'isInt' => 'Zend\\I18n\\Validator\\IsInt',
'IsInt' => 'Zend\\I18n\\Validator\\IsInt',
'phonenumber' => 'Zend\\I18n\\Validator\\PhoneNumber',
'phoneNumber' => 'Zend\\I18n\\Validator\\PhoneNumber',
'PhoneNumber' => 'Zend\\I18n\\Validator\\PhoneNumber',
'postcode' => 'Zend\\I18n\\Validator\\PostCode',
'postCode' => 'Zend\\I18n\\Validator\\PostCode',
'PostCode' => 'Zend\\I18n\\Validator\\PostCode',
),
'factories' =>
array (
'Zend\\I18n\\Validator\\Alnum' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Validator\\Alpha' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Validator\\DateTime' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Validator\\IsFloat' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Validator\\IsInt' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Validator\\PhoneNumber' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\Validator\\PostCode' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
),
),
'view_helpers' =>
array (
'aliases' =>
array (
'currencyformat' => 'Zend\\I18n\\View\\Helper\\CurrencyFormat',
'currencyFormat' => 'Zend\\I18n\\View\\Helper\\CurrencyFormat',
'CurrencyFormat' => 'Zend\\I18n\\View\\Helper\\CurrencyFormat',
'dateformat' => 'Zend\\I18n\\View\\Helper\\DateFormat',
'dateFormat' => 'Zend\\I18n\\View\\Helper\\DateFormat',
'DateFormat' => 'Zend\\I18n\\View\\Helper\\DateFormat',
'numberformat' => 'Zend\\I18n\\View\\Helper\\NumberFormat',
'numberFormat' => 'Zend\\I18n\\View\\Helper\\NumberFormat',
'NumberFormat' => 'Zend\\I18n\\View\\Helper\\NumberFormat',
'plural' => 'Zend\\I18n\\View\\Helper\\Plural',
'Plural' => 'Zend\\I18n\\View\\Helper\\Plural',
'translate' => 'Zend\\I18n\\View\\Helper\\Translate',
'Translate' => 'Zend\\I18n\\View\\Helper\\Translate',
'translateplural' => 'Zend\\I18n\\View\\Helper\\TranslatePlural',
'translatePlural' => 'Zend\\I18n\\View\\Helper\\TranslatePlural',
'TranslatePlural' => 'Zend\\I18n\\View\\Helper\\TranslatePlural',
'form' => 'Zend\\Form\\View\\Helper\\Form',
'Form' => 'Zend\\Form\\View\\Helper\\Form',
'formbutton' => 'Zend\\Form\\View\\Helper\\FormButton',
'form_button' => 'Zend\\Form\\View\\Helper\\FormButton',
'formButton' => 'Zend\\Form\\View\\Helper\\FormButton',
'FormButton' => 'Zend\\Form\\View\\Helper\\FormButton',
'formcaptcha' => 'Zend\\Form\\View\\Helper\\FormCaptcha',
'form_captcha' => 'Zend\\Form\\View\\Helper\\FormCaptcha',
'formCaptcha' => 'Zend\\Form\\View\\Helper\\FormCaptcha',
'FormCaptcha' => 'Zend\\Form\\View\\Helper\\FormCaptcha',
'captchadumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'captcha_dumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'captcha/dumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'CaptchaDumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'captchaDumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'formcaptchadumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'form_captcha_dumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'formCaptchaDumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'FormCaptchaDumb' => 'Zend\\Form\\View\\Helper\\Captcha\\Dumb',
'captchafiglet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'captcha/figlet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'captcha_figlet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'captchaFiglet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'CaptchaFiglet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'formcaptchafiglet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'form_captcha_figlet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'formCaptchaFiglet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'FormCaptchaFiglet' => 'Zend\\Form\\View\\Helper\\Captcha\\Figlet',
'captchaimage' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'captcha/image' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'captcha_image' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'captchaImage' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'CaptchaImage' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'formcaptchaimage' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'form_captcha_image' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'formCaptchaImage' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'FormCaptchaImage' => 'Zend\\Form\\View\\Helper\\Captcha\\Image',
'captcharecaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'captcha/recaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'captcha_recaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'captchaRecaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'CaptchaRecaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'formcaptcharecaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'form_captcha_recaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'formCaptchaRecaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'FormCaptchaRecaptcha' => 'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha',
'formcheckbox' => 'Zend\\Form\\View\\Helper\\FormCheckbox',
'form_checkbox' => 'Zend\\Form\\View\\Helper\\FormCheckbox',
'formCheckbox' => 'Zend\\Form\\View\\Helper\\FormCheckbox',
'FormCheckbox' => 'Zend\\Form\\View\\Helper\\FormCheckbox',
'formcollection' => 'Zend\\Form\\View\\Helper\\FormCollection',
'form_collection' => 'Zend\\Form\\View\\Helper\\FormCollection',
'formCollection' => 'Zend\\Form\\View\\Helper\\FormCollection',
'FormCollection' => 'Zend\\Form\\View\\Helper\\FormCollection',
'formcolor' => 'Zend\\Form\\View\\Helper\\FormColor',
'form_color' => 'Zend\\Form\\View\\Helper\\FormColor',
'formColor' => 'Zend\\Form\\View\\Helper\\FormColor',
'FormColor' => 'Zend\\Form\\View\\Helper\\FormColor',
'formdate' => 'Zend\\Form\\View\\Helper\\FormDate',
'form_date' => 'Zend\\Form\\View\\Helper\\FormDate',
'formDate' => 'Zend\\Form\\View\\Helper\\FormDate',
'FormDate' => 'Zend\\Form\\View\\Helper\\FormDate',
'formdatetime' => 'Zend\\Form\\View\\Helper\\FormDateTime',
'form_date_time' => 'Zend\\Form\\View\\Helper\\FormDateTime',
'formDateTime' => 'Zend\\Form\\View\\Helper\\FormDateTime',
'FormDateTime' => 'Zend\\Form\\View\\Helper\\FormDateTime',
'formdatetimelocal' => 'Zend\\Form\\View\\Helper\\FormDateTimeLocal',
'form_date_time_local' => 'Zend\\Form\\View\\Helper\\FormDateTimeLocal',
'formDateTimeLocal' => 'Zend\\Form\\View\\Helper\\FormDateTimeLocal',
'FormDateTimeLocal' => 'Zend\\Form\\View\\Helper\\FormDateTimeLocal',
'formdatetimeselect' => 'Zend\\Form\\View\\Helper\\FormDateTimeSelect',
'form_date_time_select' => 'Zend\\Form\\View\\Helper\\FormDateTimeSelect',
'formDateTimeSelect' => 'Zend\\Form\\View\\Helper\\FormDateTimeSelect',
'FormDateTimeSelect' => 'Zend\\Form\\View\\Helper\\FormDateTimeSelect',
'formdateselect' => 'Zend\\Form\\View\\Helper\\FormDateSelect',
'form_date_select' => 'Zend\\Form\\View\\Helper\\FormDateSelect',
'formDateSelect' => 'Zend\\Form\\View\\Helper\\FormDateSelect',
'FormDateSelect' => 'Zend\\Form\\View\\Helper\\FormDateSelect',
'form_element' => 'Zend\\Form\\View\\Helper\\FormElement',
'formelement' => 'Zend\\Form\\View\\Helper\\FormElement',
'formElement' => 'Zend\\Form\\View\\Helper\\FormElement',
'FormElement' => 'Zend\\Form\\View\\Helper\\FormElement',
'form_element_errors' => 'Zend\\Form\\View\\Helper\\FormElementErrors',
'formelementerrors' => 'Zend\\Form\\View\\Helper\\FormElementErrors',
'formElementErrors' => 'Zend\\Form\\View\\Helper\\FormElementErrors',
'FormElementErrors' => 'Zend\\Form\\View\\Helper\\FormElementErrors',
'form_email' => 'Zend\\Form\\View\\Helper\\FormEmail',
'formemail' => 'Zend\\Form\\View\\Helper\\FormEmail',
'formEmail' => 'Zend\\Form\\View\\Helper\\FormEmail',
'FormEmail' => 'Zend\\Form\\View\\Helper\\FormEmail',
'form_file' => 'Zend\\Form\\View\\Helper\\FormFile',
'formfile' => 'Zend\\Form\\View\\Helper\\FormFile',
'formFile' => 'Zend\\Form\\View\\Helper\\FormFile',
'FormFile' => 'Zend\\Form\\View\\Helper\\FormFile',
'formfileapcprogress' => 'Zend\\Form\\View\\Helper\\File\\FormFileApcProgress',
'form_file_apc_progress' => 'Zend\\Form\\View\\Helper\\File\\FormFileApcProgress',
'formFileApcProgress' => 'Zend\\Form\\View\\Helper\\File\\FormFileApcProgress',
'FormFileApcProgress' => 'Zend\\Form\\View\\Helper\\File\\FormFileApcProgress',
'formfilesessionprogress' => 'Zend\\Form\\View\\Helper\\File\\FormFileSessionProgress',
'form_file_session_progress' => 'Zend\\Form\\View\\Helper\\File\\FormFileSessionProgress',
'formFileSessionProgress' => 'Zend\\Form\\View\\Helper\\File\\FormFileSessionProgress',
'FormFileSessionProgress' => 'Zend\\Form\\View\\Helper\\File\\FormFileSessionProgress',
'formfileuploadprogress' => 'Zend\\Form\\View\\Helper\\File\\FormFileUploadProgress',
'form_file_upload_progress' => 'Zend\\Form\\View\\Helper\\File\\FormFileUploadProgress',
'formFileUploadProgress' => 'Zend\\Form\\View\\Helper\\File\\FormFileUploadProgress',
'FormFileUploadProgress' => 'Zend\\Form\\View\\Helper\\File\\FormFileUploadProgress',
'formhidden' => 'Zend\\Form\\View\\Helper\\FormHidden',
'form_hidden' => 'Zend\\Form\\View\\Helper\\FormHidden',
'formHidden' => 'Zend\\Form\\View\\Helper\\FormHidden',
'FormHidden' => 'Zend\\Form\\View\\Helper\\FormHidden',
'formimage' => 'Zend\\Form\\View\\Helper\\FormImage',
'form_image' => 'Zend\\Form\\View\\Helper\\FormImage',
'formImage' => 'Zend\\Form\\View\\Helper\\FormImage',
'FormImage' => 'Zend\\Form\\View\\Helper\\FormImage',
'forminput' => 'Zend\\Form\\View\\Helper\\FormInput',
'form_input' => 'Zend\\Form\\View\\Helper\\FormInput',
'formInput' => 'Zend\\Form\\View\\Helper\\FormInput',
'FormInput' => 'Zend\\Form\\View\\Helper\\FormInput',
'formlabel' => 'Zend\\Form\\View\\Helper\\FormLabel',
'form_label' => 'Zend\\Form\\View\\Helper\\FormLabel',
'formLabel' => 'Zend\\Form\\View\\Helper\\FormLabel',
'FormLabel' => 'Zend\\Form\\View\\Helper\\FormLabel',
'formmonth' => 'Zend\\Form\\View\\Helper\\FormMonth',
'form_month' => 'Zend\\Form\\View\\Helper\\FormMonth',
'formMonth' => 'Zend\\Form\\View\\Helper\\FormMonth',
'FormMonth' => 'Zend\\Form\\View\\Helper\\FormMonth',
'formmonthselect' => 'Zend\\Form\\View\\Helper\\FormMonthSelect',
'form_month_select' => 'Zend\\Form\\View\\Helper\\FormMonthSelect',
'formMonthSelect' => 'Zend\\Form\\View\\Helper\\FormMonthSelect',
'FormMonthSelect' => 'Zend\\Form\\View\\Helper\\FormMonthSelect',
'formmulticheckbox' => 'Zend\\Form\\View\\Helper\\FormMultiCheckbox',
'form_multi_checkbox' => 'Zend\\Form\\View\\Helper\\FormMultiCheckbox',
'formMultiCheckbox' => 'Zend\\Form\\View\\Helper\\FormMultiCheckbox',
'FormMultiCheckbox' => 'Zend\\Form\\View\\Helper\\FormMultiCheckbox',
'formnumber' => 'Zend\\Form\\View\\Helper\\FormNumber',
'form_number' => 'Zend\\Form\\View\\Helper\\FormNumber',
'formNumber' => 'Zend\\Form\\View\\Helper\\FormNumber',
'FormNumber' => 'Zend\\Form\\View\\Helper\\FormNumber',
'formpassword' => 'Zend\\Form\\View\\Helper\\FormPassword',
'form_password' => 'Zend\\Form\\View\\Helper\\FormPassword',
'formPassword' => 'Zend\\Form\\View\\Helper\\FormPassword',
'FormPassword' => 'Zend\\Form\\View\\Helper\\FormPassword',
'formradio' => 'Zend\\Form\\View\\Helper\\FormRadio',
'form_radio' => 'Zend\\Form\\View\\Helper\\FormRadio',
'formRadio' => 'Zend\\Form\\View\\Helper\\FormRadio',
'FormRadio' => 'Zend\\Form\\View\\Helper\\FormRadio',
'formrange' => 'Zend\\Form\\View\\Helper\\FormRange',
'form_range' => 'Zend\\Form\\View\\Helper\\FormRange',
'formRange' => 'Zend\\Form\\View\\Helper\\FormRange',
'FormRange' => 'Zend\\Form\\View\\Helper\\FormRange',
'formreset' => 'Zend\\Form\\View\\Helper\\FormReset',
'form_reset' => 'Zend\\Form\\View\\Helper\\FormReset',
'formReset' => 'Zend\\Form\\View\\Helper\\FormReset',
'FormReset' => 'Zend\\Form\\View\\Helper\\FormReset',
'formrow' => 'Zend\\Form\\View\\Helper\\FormRow',
'form_row' => 'Zend\\Form\\View\\Helper\\FormRow',
'formRow' => 'Zend\\Form\\View\\Helper\\FormRow',
'FormRow' => 'Zend\\Form\\View\\Helper\\FormRow',
'formsearch' => 'Zend\\Form\\View\\Helper\\FormSearch',
'form_search' => 'Zend\\Form\\View\\Helper\\FormSearch',
'formSearch' => 'Zend\\Form\\View\\Helper\\FormSearch',
'FormSearch' => 'Zend\\Form\\View\\Helper\\FormSearch',
'formselect' => 'Zend\\Form\\View\\Helper\\FormSelect',
'form_select' => 'Zend\\Form\\View\\Helper\\FormSelect',
'formSelect' => 'Zend\\Form\\View\\Helper\\FormSelect',
'FormSelect' => 'Zend\\Form\\View\\Helper\\FormSelect',
'formsubmit' => 'Zend\\Form\\View\\Helper\\FormSubmit',
'form_submit' => 'Zend\\Form\\View\\Helper\\FormSubmit',
'formSubmit' => 'Zend\\Form\\View\\Helper\\FormSubmit',
'FormSubmit' => 'Zend\\Form\\View\\Helper\\FormSubmit',
'formtel' => 'Zend\\Form\\View\\Helper\\FormTel',
'form_tel' => 'Zend\\Form\\View\\Helper\\FormTel',
'formTel' => 'Zend\\Form\\View\\Helper\\FormTel',
'FormTel' => 'Zend\\Form\\View\\Helper\\FormTel',
'formtext' => 'Zend\\Form\\View\\Helper\\FormText',
'form_text' => 'Zend\\Form\\View\\Helper\\FormText',
'formText' => 'Zend\\Form\\View\\Helper\\FormText',
'FormText' => 'Zend\\Form\\View\\Helper\\FormText',
'formtextarea' => 'Zend\\Form\\View\\Helper\\FormTextarea',
'form_text_area' => 'Zend\\Form\\View\\Helper\\FormTextarea',
'formTextarea' => 'Zend\\Form\\View\\Helper\\FormTextarea',
'formTextArea' => 'Zend\\Form\\View\\Helper\\FormTextarea',
'FormTextArea' => 'Zend\\Form\\View\\Helper\\FormTextarea',
'formtime' => 'Zend\\Form\\View\\Helper\\FormTime',
'form_time' => 'Zend\\Form\\View\\Helper\\FormTime',
'formTime' => 'Zend\\Form\\View\\Helper\\FormTime',
'FormTime' => 'Zend\\Form\\View\\Helper\\FormTime',
'formurl' => 'Zend\\Form\\View\\Helper\\FormUrl',
'form_url' => 'Zend\\Form\\View\\Helper\\FormUrl',
'formUrl' => 'Zend\\Form\\View\\Helper\\FormUrl',
'FormUrl' => 'Zend\\Form\\View\\Helper\\FormUrl',
'formweek' => 'Zend\\Form\\View\\Helper\\FormWeek',
'form_week' => 'Zend\\Form\\View\\Helper\\FormWeek',
'formWeek' => 'Zend\\Form\\View\\Helper\\FormWeek',
'FormWeek' => 'Zend\\Form\\View\\Helper\\FormWeek',
),
'factories' =>
array (
'Zend\\I18n\\View\\Helper\\CurrencyFormat' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\View\\Helper\\DateFormat' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\View\\Helper\\NumberFormat' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\View\\Helper\\Plural' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\View\\Helper\\Translate' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\I18n\\View\\Helper\\TranslatePlural' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\Form' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormButton' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormCaptcha' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\Captcha\\Dumb' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\Captcha\\Figlet' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\Captcha\\Image' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\Captcha\\ReCaptcha' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormCheckbox' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormCollection' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormColor' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormDate' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormDateTime' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormDateTimeLocal' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormDateTimeSelect' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormDateSelect' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormElement' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormElementErrors' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormEmail' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormFile' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\File\\FormFileApcProgress' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\File\\FormFileSessionProgress' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\File\\FormFileUploadProgress' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormHidden' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormImage' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormInput' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormLabel' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormMonth' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormMonthSelect' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormMultiCheckbox' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormNumber' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormPassword' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormRadio' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormRange' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormReset' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormRow' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormSearch' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormSelect' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormSubmit' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormTel' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormText' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormTextarea' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormTime' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormUrl' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
'Zend\\Form\\View\\Helper\\FormWeek' => 'Zend\\ServiceManager\\Factory\\InvokableFactory',
),
),
'config_cache_path' => 'data/config-cache.php',
'templates' =>
array (
'layout' => 'layout::default',
),
'db' => array(
/* ... */
),
'config_cache_enabled' => true,
'debug' => false,
'zend-expressive' =>
array (
'raise_throwables' => true,
'programmatic_pipeline' => true,
'error_handler' =>
array (
'template_404' => 'error::404',
'template_error' => 'error::error',
),
),
);
- Now, I add manually the new
App\ConfigProvider
to theconfig/config.php
file:
<?php
use Zend\ConfigAggregator\ArrayProvider;
use Zend\ConfigAggregator\ConfigAggregator;
use Zend\ConfigAggregator\PhpFileProvider;
// To enable or disable caching, set the `ConfigAggregator::ENABLE_CACHE` boolean in
// `config/autoload/local.php`.
$cacheConfig = [
'config_cache_path' => 'data/config-cache.php',
];
$aggregator = new ConfigAggregator([
\App\ConfigProvider::class,
\Zend\I18n\ConfigProvider::class,
\Zend\Form\ConfigProvider::class,
\Zend\InputFilter\ConfigProvider::class,
\Zend\Filter\ConfigProvider::class,
\Zend\Validator\ConfigProvider::class,
\Zend\Hydrator\ConfigProvider::class,
\Zend\Db\ConfigProvider::class,
// Include cache configuration
new ArrayProvider($cacheConfig),
// Load application config in a pre-defined order in such a way that local settings
// overwrite global settings. (Loaded as first to last):
// - `global.php`
// - `*.global.php`
// - `local.php`
// - `*.local.php`
new PhpFileProvider('config/autoload/{{,*.}global,{,*.}local}.php'),
// Load development config if it exists
new PhpFileProvider('config/development.config.php'),
], $cacheConfig['config_cache_path']);
return $aggregator->getMergedConfig();
- Next, I add the new namespace to the
composer.json
and do adump-autoload
:
/* ... */
"autoload": {
"psr-4": {
"App\\": "src/App/src/",
}
},
/* ... */
$ composer dump-autoload
- Finally, I check the
development-mode
:
$ composer development-disable
Development mode was already disabled.
$ composer development-enable
the file data/config-cache.php
does NOT exist - okay:
- Next, I put some logic into the
App\ConfigProvider
:
<?php
namespace App;
class ConfigProvider
{
public function __invoke() : array
{
return [
'templates' => $this->getTemplates(),
];
}
public function getTemplates() : array
{
return [
'paths' => [
'app' => [__DIR__ . '/../templates/app'],
],
];
}
}
$ composer development-enable
Already in development mode!
$ composer development-disable
Script zf-development-mode disable handling the development-disable event returned with error code 255
That's it.
I'm puzzled :-(
Hello @weierophinney and @xtreamwayz,
I have started to update Ralf Eggert's album tutorial to expressive 2.0
.
You can have a look at my project on gitlab.
In part6
the development-mode
works perfectly fine but starting with part7
where I introduce the ConfigProvider.php
for the album module it doesn't work anymore.
Maybe You have time to have a look at it.
Thanks in advance,
LT.
Weird. I have cloned your project and tried part6 and part7. I'm running Ubuntu with php 7.1.4 and composer 1.4.1 as well. Everything seems to work for me.
When I visit the page I get a 500 error that's caused by a missing zend-db driver. Obviously caused by not setting up a database and its config. But the config is cached and deleted as expected. No errors here for part6 or part7 when running the zf-development-mode with and without the generated config cache.
I have no idea what is going on or where that 255 code is coming from. ZF\DevelopmentMode\Disable
only returns 1 or 0 as its exit status. Composer seems to catch an exception and only gives the code back, which is not helpful at all. To dig deeper into this I would leave the composer commands alone (I tried this as well and worked as expected) and dig into the code of zfcampus/zf-development-mode
:
vendor/bin/zf-development-mode disable
vendor/bin/zf-development-mode enable
Do some old school debugging and add some var_dumps in that class and see at what line it throws the exception. I'd like to help more but I can't reproduce it with the exact same setup (except ubuntu vs debian).
Thanks a lot!
Quick check:
vendor/bin/zf-development-mode enable
returns "Already in development mode!"
vendor/bin/zf-development-mode disable
returns nothing - no message, no error, neither 0
nor 1
Cheers,
LT.
Okay,
I got it!
In ConfigDiscoveryTrait
in line 129 the variable $configFile
is set for expressive
projects, but the path to the file is missing like in line 126 is done for zend framework
projects.
With line 129 like
$configFile = file_exists($configFile) ? $configFile : sprintf('%s/%s', $this->projectDir, $this->expressiveConfigPath);
it works like a charm.
Thanks for Your help!
Will create a PR.
Cheers,
Lowtower.
Okay,
that was only half the truth.
The problem is with the variable projectDir
, which is not used at all but set to an empty string in the constructor of the classes Disable
and Enable
.
I've had another look at your code and it doesn't make sense. You say that part 6 is working, but part 7 throws the exception. These are the changes you made between the 2: https://gitlab.com/Lowtower/zend-expressive2-tutorial/compare/part6...part7
In config/config.php you changed \Album\ConfigProvider::class,
to Album\ConfigProvider::class,
.
And in src/Album/src/ConfigProvider.php you added return type declarations and enforced strict types.
How can suddenly the ConfigDiscoveryTrait
detection throw an exception if you didn't change anything to it?
Since part 6 and part 7 both working for me I can't reproduce it or debug it. In part 7, I would manually revert all changed lines one by one and see at what point the exception goes away.
You are completely right!
Return type declarations were introduced with php version 7.0.
In the composer.json
file v5.6 is still allowed.
In my environment php 7.1 is used for the apache server, but on the command line the default version is php 5.6 (don't ask why!).
I can and do call php71 directly, but I guess that it falls back to the default version somehow in the script.
The line in the ConfigDiscoveryTrait
is the line where the expressiveConfig
is included or not, if the file exists. If it's not included the php version problem doesn't occur, if it is included the script fails with php versions prior to 7.0.
I have learned a lot and I am sorry for the inconvenience and my stupidity and my sloppiness.
Nevertheless, i still think there is a problem in zf-development-mode
with empty projectDir
.
I will close this issue and the #31.
I will further investigate and try to create a new PR.
I You have an idea on how to test with an empty projectDir
variable, please let me know.
Thanks a lot.
Cheers,
LT.
In my environment php 7.1 is used for the apache server, but on the command line the default version is php 5.6 (don't ask why!).
That explains a lot :D
I can and do call php71 directly, but I guess that it falls back to the default version somehow in the script.
The line in the ConfigDiscoveryTrait is the line where the expressiveConfig is included or not, if the file exists. If it's not included the php version problem doesn't occur, if it is included the script fails with php versions prior to 7.0.
What might happen here is that you call composer with php 7. However composer starts a new php instance when you execute a script. I'm guessing that it starts php 5 instead of php 7.
I have learned a lot and I am sorry for the inconvenience and my stupidity and my sloppiness.
Don't worry, it happens to everyone (even if they don't admit it)
Nevertheless, i still think there is a problem in zf-development-mode with empty projectDir.
If You have an idea on how to test with an empty projectDir variable, please let me know.
That's the whole issue. I can't reproduce it and not therefor not write a test. As I commented on your PR, you need to create a test that triggers the exception. After that you can change the code so the specific test will pass, including all other tests.
Anyway, it's really appreciated you took the time to report the issue and helped out finding a solution and writing a PR.