Skip to content

[WIP][RFC] improve plugin loading with symfony1-plugin typed composer packages #342

Open
@connorhu

Description

@connorhu

For Issue #341, I looked into what is needed to put sfDoctrinePlugin in a separate package and not have it shipped with the base framework (e.g. propel orm doesn't need this plugin). I don't really like the solution of the other fos1 plugin packages. What happens there is that composer-installer 1.0 knows about symfony1-plugin and copies the installed package into the appropriate plugins directory. This is not very practical to do in the composer era. Let's take a look at what to do:

  • the sfProjectConfiguration::getAllPluginPaths method should return all packages that are of type symfony1-plugin:
          if (class_exists(Composer\InstalledVersions::class)) {
              $sf1PluginPackageNames = Composer\InstalledVersions::getInstalledPackagesByType('symfony1-plugin');
    
              foreach ($sf1PluginPackageNames as $sf1PluginPackageName) {
                  $path = Composer\InstalledVersions::getInstallPath($sf1PluginPackageName);
    
                  if ($path !== null) {
                      $pluginPaths[basename($path)] = $path;
                  }
              }
          }
  • we should not allow composer/installers 1.0 to be in the dependencies, because this will duplicate the plugins

This change would get rid of package codes (which don't work anyway: https://github.com/orgs/FriendsOfSymfony1/discussions/333#discussion-6326793 ), pear codes, and should be default the composer installation way of the framework and the plugins.

What other improvements could be considered?

  • support psr-4 plugins?
  • composer plugin to enable plugins (same as bundle.php).

Files to remove

  • ./package.xml.tmpl
  • ./lib/plugin/*
  • ./test/unit/plugin/*

Deprecated commands/tasks

  • plugin:add-channel
  • plugin:install
  • plugin:uninstall
  • plugin:upgrade

Deprecated methods

  • sfBaseTask::getPluginManager

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions