Code Monkey home page Code Monkey logo

Comments (9)

weierophinney avatar weierophinney commented on June 8, 2024 1

And, final point: what I demonstrate above is that the behavior is the same regardless of whether or not the --no-interaction is in use, when using the latest versions of zend-component-installer, which is what the original report was asserting was not the case. The behavior may not be what you want, but it's consistent, and it's what we opted for after answering support questions for more than a year related to the defaults.

from zend-component-installer.

weierophinney avatar weierophinney commented on June 8, 2024

This is how Composer works with the --no-interaction flag; it bypasses interactions, and any default values are what are then used.

We switched from defaulting to no injection to injecting with version 2 of this component because we handled far too many problems from users who selected the default behavior (no injection) and then couldn't understand why the code wasn't working. We found it was better from a general usability perspective to default to inject, as that was the expected behavior.

Generally speaking, if I want to install without interaction, I generally do not want scripts running, either. Most build commands I've seen that prepare the production install use the combination --no-interaction --no-scripts --optimize-autoloader --prefer-dist.

from zend-component-installer.

Xerkus avatar Xerkus commented on June 8, 2024

There is inconsistency here between interactive and non-interactive modes.
I think interactive mode defaults should be changed to mirror non-interactive behavior to avoid confusion.

from zend-component-installer.

weierophinney avatar weierophinney commented on June 8, 2024

@Xerkus Please read what I wrote above; we're not going to change this back, because defaulting to no injection led to a ton of support issues. We have far fewer support problems regarding modules today due to this change.

Additionally, interactive mode defaults to injection, which is exactly what non-interactive does as well. It's only when you apply the --no-scripts option that no injection happens. --no-scripts is not the same as --no-interaction. So I'm not sure what your assertion is regarding...

from zend-component-installer.

worthwhileindustries avatar worthwhileindustries commented on June 8, 2024

@weierophinney I guess we are in a sad state of development these days... albeit we need all the adoption we can get.

Anyhow, this statement is false AFAIK and @Xerkus is correct. Maybe it does (haven't tested myself yet) default to inject under the hood but, then that means the output is incorrect when in interactive mode that shows Do not inject as the default option which was throwing me off.

Additionally, interactive mode defaults to injection, which is exactly what non-interactive does as well.

I have shown the defaults in interactive mode in my post above as being Do not inject. A direct copy/paste of the output below:

- Installing zendframework/zend-form (2.12.0): Downloading (100%)

  Please select which config file you wish to inject 'Zend\Form' into:
  [0] Do not inject
  [1] config/modules.config.php
  [2] config/development.config.php.dist
  Make your selection (default is 0):

from zend-component-installer.

weierophinney avatar weierophinney commented on June 8, 2024

@worthwhileindustries Which versions of the following are you using, please?

  • Composer
  • zend-component-installer

Based on what you've reported, I created a zend-mvc project using the following:

$ composer create-project zendframework/skeleton-application test

I chose the minimal installation option. Once created, I entered the project, updated all dependencies, and also updated to the latest zend-component-installer:

$ composer update
$ composer require "zendframework/zend-component-installer:^2.0"

Which installed version 2.1.1.

Now, I decided to test installing zend-form, as you did.

First, I used interaction:

$ composer require zendframework/zend-form
Using version ^2.12 for zendframework/zend-form
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 4 installs, 0 updates, 0 removals
  - Installing zendframework/zend-hydrator (2.4.0): Loading from cache

  Please select which config file you wish to inject 'Zend\Hydrator' into:
  [0] Do not inject
  [1] config/modules.config.php
  [2] config/development.config.php.dist
  Make your selection (default is 1):

So, with an up-to-date version of zend-component-installer, we can see that the default is to inject to a production configuration.

I aborted, and then tried without interaction:

$ composer require --no-interaction zendframework/zend-form
Using version ^2.12 for zendframework/zend-form
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 4 installs, 0 updates, 0 removals
  - Installing zendframework/zend-hydrator (2.4.0): Loading from cache
    Installing Zend\Hydrator from package zendframework/zend-hydrator
  - Installing zendframework/zend-filter (2.8.0): Loading from cache
    Installing Zend\Filter from package zendframework/zend-filter
  - Installing zendframework/zend-inputfilter (2.8.2): Loading from cache
    Installing Zend\InputFilter from package zendframework/zend-inputfilter
  - Installing zendframework/zend-form (2.12.0): Loading from cache
    Installing Zend\Form from package zendframework/zend-form
zendframework/zend-hydrator suggests installing zendframework/zend-serializer (^2.6.1, to use the SerializableStrategy)
zendframework/zend-filter suggests installing zendframework/zend-crypt (Zend\Crypt component, for encryption filters)
zendframework/zend-filter suggests installing zendframework/zend-i18n (Zend\I18n component for filters depending on i18n functionality)
zendframework/zend-form suggests installing zendframework/zend-captcha (^2.7.1, required for using CAPTCHA form elements)
zendframework/zend-form suggests installing zendframework/zend-code (^2.6 || ^3.0, required to use zend-form annotations support)
zendframework/zend-form suggests installing zendframework/zend-i18n (^2.6, required when using zend-form view helpers)
zendframework/zend-form suggests installing zendframework/zendservice-recaptcha (in order to use the ReCaptcha form element)
Writing lock file
Generating autoload files

Note that it does inject; after each component is installed, it mentions it is installing the component. I verified by inspecting my config/modules.config.php:

return [
    'Zend\Form',
    'Zend\InputFilter',
    'Zend\Filter',
    'Zend\Hydrator',
    'Zend\Router',
    'Zend\Validator',
    'Application',
];

So, my take is: you're using the old 0.X series of zend-component-installer that's bundled in the framework. Upgrade that, and you'll observe the behavior I described.

Now, I see two action items based on this:

  • We need to document better that you need to run composer install with the --no-interaction flag if decide not to inject module configuration in your application during installation, and/or remove it later.

  • We need to update the skeleton to use a more recent version of zend-component-installer.

The former is likely something to include both in the installer's documentation, as well as in the Expressive and zend-mvc tutorials.

The latter is something for the zendframework/ZendSkeletonApplication repository.

from zend-component-installer.

worthwhileindustries avatar worthwhileindustries commented on June 8, 2024

@weierophinney I haven't tried updating all the things but, just for reference this is what my versions look like for this particular issue originally posted.

root@c48ba3e70f3a:/var/www/html# composer info
alcaeus/mongo-php-adapter                      1.1.3   Adapter to provide ext-mongo interface on top of mongo-php-libary
api-skeletons/zf-doctrine-module-zend-hydrator 1.0.1   Corrects DoctrineModule classes to use zend-hydrator
bshaffer/oauth2-server-php                     v1.10.0 OAuth2 Server for PHP
container-interop/container-interop            1.2.0   Promoting the interoperability of container objects (DIC, SL, etc.)
doctrine/annotations                           v1.6.0  Docblock Annotations Parser
doctrine/cache                                 v1.8.0  Caching library offering an object-oriented API for many cache backends
doctrine/collections                           v1.5.0  Collections Abstraction library
doctrine/common                                v2.9.0  Common Library for Doctrine projects
doctrine/doctrine-module                       1.2.0   Zend Framework Module that provides Doctrine basic functionality required for ORM and ODM modules
doctrine/doctrine-mongo-odm-module             1.0.0   Zend Framework Module that provides Doctrine MongoDB ODM functionality
doctrine/event-manager                         v1.0.0  Doctrine Event Manager component
doctrine/inflector                             v1.3.0  Common String Manipulations with regard to casing and singular/plural rules.
doctrine/instantiator                          1.1.0   A small, lightweight utility to instantiate objects in PHP without invoking their constructors
doctrine/lexer                                 v1.0.1  Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
doctrine/mongodb                               1.6.3   Doctrine MongoDB Abstraction Layer
doctrine/mongodb-odm                           1.2.5   Doctrine MongoDB Object Document Mapper
doctrine/persistence                           v1.0.1  Doctrine Persistence abstractions.
doctrine/reflection                            v1.0.0  Doctrine Reflection component
elasticsearch/elasticsearch                    v5.3.2  PHP Client for Elasticsearch
guzzlehttp/guzzle                              6.3.3   Guzzle is a PHP HTTP client library
guzzlehttp/promises                            v1.3.1  Guzzle promises library
guzzlehttp/psr7                                1.4.2   PSR-7 message implementation that also provides common utility methods
guzzlehttp/ringphp                             1.1.1   Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.
guzzlehttp/streams                             3.0.0   Provides a simple abstraction over streams of data
herrera-io/json                                1.0.3   A library for simplifying JSON linting and validation.
herrera-io/phar-update                         1.0.3   A library for self-updating Phars.
justinrainbow/json-schema                      1.6.1   A library to validate a json schema.
kherge/version                                 1.0.1   A parsing and comparison library for semantic versioning.
michelf/php-markdown                           1.8.0   PHP Markdown
mongodb/mongodb                                1.4.2   MongoDB driver library
myclabs/deep-copy                              1.8.1   Create deep copies (clones) of your objects
paragonie/random_compat                        v2.0.17 PHP 5.x polyfill for random_bytes() and random_int() from PHP 7
phar-io/manifest                               1.0.3   Component for reading phar.io manifest information from a PHP Archive (PHAR)
phar-io/version                                2.0.1   Library for handling version information and constraints
phpdocumentor/reflection-common                1.0.1   Common reflection classes used by phpdocumentor to reflect the code structure
phpdocumentor/reflection-docblock              4.3.0   With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.
phpdocumentor/type-resolver                    0.4.0  
phpro/zf-doctrine-hydration-module             v3.0.0  Doctrine hydrators for ZF2 and ZF3
phpspec/prophecy                               1.8.0   Highly opinionated mocking framework for PHP 5.3+
phpunit/php-code-coverage                      6.0.7   Library that provides collection, processing, and rendering functionality for PHP code coverage information.
phpunit/php-file-iterator                      2.0.1   FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-text-template                      1.2.1   Simple template engine.
phpunit/php-timer                              2.0.0   Utility class for timing
phpunit/php-token-stream                       3.0.0   Wrapper around PHP's tokenizer extension.
phpunit/phpunit                                7.3.5   The PHP Unit Testing framework.
psr/cache                                      1.0.1   Common interface for caching libraries
psr/container                                  1.0.0   Common Container Interface (PHP FIG PSR-11)
psr/http-message                               1.0.1   Common interface for HTTP messages
psr/link                                       1.0.0   Common interfaces for HTTP links
psr/log                                        1.0.2   Common interface for logging libraries
psr/simple-cache                               1.0.1   Common interfaces for simple caching
react/promise                                  v2.7.0  A lightweight implementation of CommonJS Promises/A for PHP
sebastian/code-unit-reverse-lookup             1.0.1   Looks up which function or method a line of code belongs to
sebastian/comparator                           3.0.2   Provides the functionality to compare PHP values for equality
sebastian/diff                                 3.0.1   Diff implementation
sebastian/environment                          3.1.0   Provides functionality to handle HHVM/PHP environments
sebastian/exporter                             3.1.0   Provides the functionality to export PHP variables for visualization
sebastian/global-state                         2.0.0   Snapshotting of global state
sebastian/object-enumerator                    3.0.3   Traverses array structures and object graphs to enumerate all referenced objects
sebastian/object-reflector                     1.1.1   Allows reflection of object attributes, including inherited and non-public ones
sebastian/recursion-context                    3.0.0   Provides functionality to recursively process PHP variables
sebastian/resource-operations                  1.0.0   Provides a list of PHP built-in functions that operate on resources
sebastian/version                              2.0.1   Library that helps with managing the version number of Git-hosted PHP projects
seld/jsonlint                                  1.7.1   JSON Linter
squizlabs/php_codesniffer                      3.3.1   PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.
symfony/console                                v3.4.15 Symfony Console Component
symfony/debug                                  v4.1.4  Symfony Debug Component
symfony/polyfill-mbstring                      v1.9.0  Symfony polyfill for the Mbstring extension
theseer/tokenizer                              1.1.0   A small library for converting tokenized PHP source code into XML and potentially other formats
webmozart/assert                               1.3.0   Assertions to validate method input/output with nice error messages.
zendframework/zend-authentication              2.6.0   provides an API for authentication and includes concrete authentication adapters for common use case scenarios
zendframework/zend-cache                       2.8.2   Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output
zendframework/zend-code                        3.3.1   provides facilities to generate arbitrary code using an object oriented interface
zendframework/zend-component-installer         2.1.1   Composer plugin for automating component registration in zend-mvc and Expressive applications
zendframework/zend-config                      3.2.0   provides a nested object property based user interface for accessing this configuration data within application code
zendframework/zend-console                     2.7.0   Build console applications using getopt syntax or routing, complete with prompts
zendframework/zend-crypt                       3.3.0   Strong cryptography tools and password hashing
zendframework/zend-db                          2.9.3   Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations
zendframework/zend-debug                       2.6.0   Safely dump debug information to HTML
zendframework/zend-developer-tools             1.2.1   Module for developer and debug tools for use with zend-mvc applications.
zendframework/zend-dom                         2.7.1   provides tools for working with DOM documents and structures
zendframework/zend-escaper                     2.6.0   Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs
zendframework/zend-eventmanager                3.2.1   Trigger and listen to events within a PHP application
zendframework/zend-filter                      2.8.0   provides a set of commonly needed data filters
zendframework/zend-form                        2.12.0  Validate and display simple and complex forms, casting forms to business objects and vice versa
zendframework/zend-http                        2.8.2   Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests
zendframework/zend-hydrator                    2.4.0   Serialize objects to arrays, and vice versa
zendframework/zend-inputfilter                 2.8.2   Normalize and validate input sets from the web, APIs, the CLI, and more, including files
zendframework/zend-json                        3.1.0   provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP
zendframework/zend-loader                      2.6.0   Autoloading and plugin loading strategies
zendframework/zend-math                        3.1.1   Create cryptographically secure pseudo-random numbers, and manage big integers
zendframework/zend-modulemanager               2.8.2   Modular application system for zend-mvc applications
zendframework/zend-mvc                         3.1.1   Zend Framework's event-driven MVC layer, including MVC Applications, Controllers, and Plugins
zendframework/zend-paginator                   2.8.1   zend-paginator is a flexible component for paginating collections of data and presenting that data to users.
zendframework/zend-permissions-acl             2.7.0   Provides a lightweight and flexible access control list (ACL) implementation for privileges management
zendframework/zend-permissions-rbac            3.0.1   Provides a role-based access control management
zendframework/zend-router                      3.2.0   Flexible routing system for HTTP and console applications
zendframework/zend-servicemanager              3.3.2   Factory-Driven Dependency Injection Container
zendframework/zend-stdlib                      3.2.1   SPL extensions, array utilities, error handlers, and more
zendframework/zend-test                        3.2.0   Tools to facilitate unit testing of zend-mvc applications
zendframework/zend-uri                         2.6.1   A component that aids in manipulating and validating ยป Uniform Resource Identifiers (URIs)
zendframework/zend-validator                   2.10.2  provides a set of commonly needed validators
zendframework/zend-view                        2.10.0  provides a system of helpers, output filters, and variable escaping
zfcampus/zf-api-problem                        1.3.0   ZF2 Module providing API-Problem assets and rendering
zfcampus/zf-apigility                          1.4.0   Apigility module for Zend Framework
zfcampus/zf-apigility-admin                    1.6.0   Apigility Admin module
zfcampus/zf-apigility-admin-ui                 1.3.11  Apigility Admin UI module
zfcampus/zf-apigility-doctrine                 2.2.0   Apigility Doctrine module
zfcampus/zf-apigility-documentation            1.3.0   Apigility API documentation module
zfcampus/zf-apigility-provider                 1.3.0   Apigility interfaces
zfcampus/zf-asset-manager                      1.2.0   Composer plugin for copying module assets into application document roots.
zfcampus/zf-composer-autoloading               2.1.0   Sets up Composer-based autoloading for your Zend Framework modules
zfcampus/zf-configuration                      1.3.3   Zend Framework module providing a REST resource for manipulating configuration
zfcampus/zf-console                            1.4.0   Library for creating and dispatching console commands
zfcampus/zf-content-negotiation                1.4.0   ZF Module providing content-negotiation features
zfcampus/zf-content-validation                 1.6.1   Zend Framework module providing incoming content validation
zfcampus/zf-deploy                             1.3.0   Deployment tool for Zend Framework applications
zfcampus/zf-development-mode                   3.2.0   Zend Framework development mode script
zfcampus/zf-doctrine-querybuilder              1.6.0   Apigility Doctrine QueryBuilder module
zfcampus/zf-hal                                1.5.0   ZF2 Module providing Hypermedia Application Language assets and rendering
zfcampus/zf-mvc-auth                           1.5.1   ZF2 Module providing Authentication and Authorization events and infrastructure
zfcampus/zf-oauth2                             1.5.0   ZF module for implementing an OAuth2 server
zfcampus/zf-rest                               1.5.0   ZF Module providing structure for RESTful resources
zfcampus/zf-rpc                                1.4.0   ZF2 Module for simplifying the creation of RPC services
zfcampus/zf-versioning                         1.3.0   ZF2 Module providing listeners and route prototypes for implementing API versioning
zfr/zfr-cors                                   v1.5.0  Zend Framework 2 module that let you deal with CORS requests

from zend-component-installer.

weierophinney avatar weierophinney commented on June 8, 2024

It looks like you're on zend-component-installer 2.1.1, which is the latest.

Which means I cannot reproduce your issue - what I posted in here today was based on that same version, and I'm clearly getting different results.

from zend-component-installer.

weierophinney avatar weierophinney commented on June 8, 2024

This repository has been closed and moved to laminas/laminas-component-installer; a new issue has been opened at laminas/laminas-component-installer#1.

from zend-component-installer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.