I'm trying to find what to call a particular module (In this case, Google Simple Map) so I can use Composer to add it to my Drupal project. I know its human readable name is Google Simple Map module.
But at the command line, running search, nothing for Google Simple Map is found:
$ composer search -N drupal | grep -i simple
drubb/drupal-simple
drupalauth/simplesamlphp-module-drupalauth
Eventually, by trial and error, a long time later, Composer says something similar to "Are you trying to install drupal/simple_gmap? (closest match)"
My package installs fine then:
$ composer require drupal/simple_gmap
(success message here)
What was wrong with my original search syntax; how can I run search to find something like drupal/simple_gmap?
Composer should be able to find these as long as the project in question has a release branch or tag and your composer.json file is set to look for the drupal respositories via:
...
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
},
...
Each of the projects on Drupal.org does also mention an example command on the project page. Currently for Simple Google Maps latest stable release this is: https://www.drupal.org/project/simple_gmap/releases/3.0.1
Related
I run different versions of Symfony and PHP on my Mac for various apps I have to work on (sorry that our clients are so slow to get to upgrade), and I'm trying to install the LTS version of Symfony through the CLI documentation recommendations, but I'm trying to get it to use a composer.phar in the folder I run the command in... it keeps defaulting to the globally-installed one.
Sure I could just go change composer's execution path or upgrade/downgrade it temporarily whenever I want to run the cli for x version of PHP, but that's gonna drive me crazy and I'd rather see how to tell it to run a certain composer.phar file. I'm not seeing in the documentation how to do this to get the benefits of the --webapp option.
The documentation is weird on it anyway; I can't tell if running composer directly (as composer.phar) will give me the benefits of the --webapp option using the symfony command (because the composer commands are identical for 'traditional web application' and 'console application or API'):
https://symfony.com/doc/5.4/setup.html#creating-symfony-applications
# run this if you are building a traditional web application
$ symfony new my_project_directory --version=5.4 --webapp
# run this if you are building a microservice, console application or API
$ symfony new my_project_directory --version=5.4
# run this if you are building a traditional web application
$ composer create-project symfony/skeleton:"^5.4" my_project_directory
$ cd my_project_directory
$ composer require webapp
# run this if you are building a microservice, console application or API
$ composer create-project symfony/skeleton:"^5.4" my_project_directory
When I run the install through composer directly, I can't tell if I'm getting the benefits of the symfony command --webapp option... and I'm not seeing an option for the symfony command to specify to use the folder's composer.phar.
I had to cheat a little bit: I installed the latest composer using the instructions here to a composer.phar file:
https://getcomposer.org/download/
I then created a console alias like php composer.phar, ran the Symfony create composer command with that alias, which created the symfony-5 folder no problem, then I copied the composer.phar file to the new folder and run the alias for any other composer commands, like with require webapp, which is working! Kind of nice to freeze a version of composer for any similar repos.
Maybe not the best answer, but it's working.
Also I discovered that I could just run composer self-update to get the latest version, which worked, then composer self-update [whatever version number] to get back to one I need that works with other repos (since certain version ranges just do not work with certain version ranges of PHP). Annoying, but functional.
Ultimately I think moving forward, it's best to make a copy of composer.phar at a compatible version range for your older PHP apps, depending on their versions, and use those in an alias, rather than totally rely on a global composer version, which has proven not completely workable for my work.
First of all, I can't use composer because Im under a corporate network. I tried everything to get composer working :
HTTP_PROXY, HTTPS_PROXY, HTTPS_FULLURI ... Nothing is working. Composer diag gives an OK status for http packagist but FAILS for https connectivity. The error it gives me is:
SSL : Handshake timed out.
But that's not my question, I spent to much time trying to get composer working (But if you got a solution, you'll make my day )
My real question is the following : How to install bundles manually
I want to install this bundle : http://knpbundles.com/pierredup/MenuBundle.
What I did to try installing the bundle :
Registering the bundle in appKernel.php :
new \CS\MenuBundle\CSMenuBundle()
Tried to add it in the autoload.php :
$loader->add('CS', __ DIR __.'/../vendor/CS/CSMenuBundle.php');
(Dont know how to add php code properly ... )
But it doesn't work, got the following error :
Attempted to load class "CSMenuBundle" from namespace "CS\MenuBundle".
Did you forget a "use" statement for another namespace?
And then, even if it is not a good practise, I tried to add it to autoload_namespaces.php and did a dump-autoload after that :
'CS\MenuBundle' => array($vendorDir. '/CS/')
I still have an error, but not exactly the same one :
Attempted to load class "CSMenuBundle" from namespace "CS\MenuBundle".
Did you forget a "use" statement for "CS\MenuBundle\CSMenuBundle"?
Now I'm a bit frustrating, I saw many posts (not on Stack) where people scream because we have to use composer to manage dependencies. I totally agree with that, but I can't, so I'm trying to find another way, and as I can't find any clear tutorial which explains how to install vendors without composer, here I am.
Note that I commented on the problems I see with your approach on your question directly.
However, I looked at the package you want to use to see if there would be ANY chance installing it somehow (preferring Composer). I don't think it is possible or feasible.
composer require customscripts/menubundle:dev-master - this would be the easy command for Composer to do everything. However there are problems:
The package you want to use is not registered on packagist.org, so there is no way to simply use Composer on a machine properly connected to the internet, grab the packages, zip them and transfer them to the place you need it.
To work around this, you'd manually add the repository to the composer.json file - this might actually work (however it takes way too much time on my VM). You'll end up with code that was last edited in the year 2012!
The dependencies of that code will likely not work anymore. The composer.json of that package lists "require": {"knplabs/knp-menu-bundle": "dev-master", "symfony/framework-bundle": ">=2.0,<2.3-dev", "jms/di-extra-bundle": "1.1.*"} - even the first "knplabs/knp-menu-bundle" will never work. Remember that the code of this package is from 2012 - now we are in 2016, so "knp-menu-bundle" has seen four years of development on the master branch. There simply is NO WAY of knowing which commit had been used of this package. You'd have to reverse-engineer this lost information.
Additionally, you see why Composer is awesome and doing it manually is bad: In addition to your wished package, you have to download the three additional packages mentioned here.
But detecting packages that have to be added is a recursive task: knp-menu-bundle has a dependency on knp-menu (with no further dependencies) and symfony/framework-bundle (already added). symfony/framework-bundle itself has a dependency on 9 more Symfony packages and doctrine/common... and so on. You have to detect every single package of this and download the correct version manually if you cannot use Composer.
Skipping your original package because that installation wasn't finishing while I was typing my answer, I tried to install knp-menu-bundle to see how many packages would be installed. Composer installed 20 packages, some of them using Symfony in 2.8 (it SHOULD be compatible with Symfony 2.2 stuff, shouldn't it) - and I simply ran composer require knplabs/knp-menu-bundle:1.1.1 to grab a similarly old version of knp-menu-bundle from 2012.
The strength of using Composer is that it supports rapid development by allowing updating quickly, downgrading reliably (if you commit your composer.lock file and always use tagged versions), and simply allowing to add new packages instantly. Not being able to use Composer is a very severe limitation for you as a PHP developer. Talk to your boss or team lead about your company's situation with the HTTPS proxy, and find a solution to use Composer. The alternative is to develop everything from scratch on your own or waste plenty of hours trying to fiddle with manual downloads that don't fit together easily.
I'm really new to composer and don't understand it well (yet).
Here's the thing :
I'm building a Wordpress plugin that needs external libraries.
Thoses libraries are FluentDOM and Selectors-Symfony for FluentDOM.
Both have installation instructions for Composer only :
FluentDOM :
FluentDOM is available on Packagist.org, just add the dependency to your composer.json.
{
"require" : {
"fluentdom/fluentdom": "5.x"
}
}
Selectors-Symfony :
composer require symfony/css-selector
My plugin path is /wordpress/wp-content/my-custom-plugin.
Should I write a composer.json file at the root of this directory, and what should be its content ?
Eventually, I would like install those depedencies in /wordpress/wp-content/my-custom-plugin/_inc/lib
Could anyone explain me how to do this ?
Thanks !
Well, I'd say that unless Wordpress starts supporting Composer (they don't officially at this time although Wordpress can be installed with Composer if you know what you're doing, first and foremost know the package name of it), you shouldn't think too much about using it for delivery of your plugin, meaning: If you use other software in your plugin, I think you have to bundle it inside your plugin, or it won't work.
It still will create issues like "Is the version of the library you are using compatible with the same library other plugins use?" and "How do you do autoloading?" correctly.
Internally, you could use Composer to manage these libraries just like you would do with any other project that uses Composer, with the minor difference that the released package of your plugin must include all these libraries and autoloaders you added - with Composer or something else.
Be warned that I basically don't know anything about how Wordpress people usually organize their stuff. Reading the discussion I linked to in the comment to your question, I get the impression that they have still a very long way to go, and that there is nobody actively behind it and promotes using Composer for dependency management because it also works the usual way, or it might break things.
Internally, you could use Composer to manage these libraries just like
you would do with any other project that uses Composer, with the minor
difference that the released package of your plugin must include all
these libraries and autoloaders you added - with Composer or something
else.
Thanks Sven, that is what I wanted to know.
I finally managed to do it.
Here is my step-by-step guide to install a dependency (here, fluentDOM) into /wordpress/wp-content/plugins/my-custom-plugin/_inc/php with the terminal and without having any composer.json at the start.
First, of course, you need to install Composer. As I will use it for php dependencies of my plugin, I will install it in my-custom-plugin/_inc/php.
(You could also install it at the root of your plugin and adjust following commands)
1/ Open Terminal and go to that directory :
cd /Applications/MAMP/htdocs/my-project/wordpress/wp-content/plugins/my-custom-plugin/_inc/php
2/ Install Composer :
curl -sS https://getcomposer.org/installer | php
Now I'm ready to use Composer in my-custom-plugin/_inc/php.
On the fluentDOM website, I see that the package I need to install is called fluentdom/fluentdom.
3/ So, let's install the package :
composer require fluentdom/fluentdom
If you need more informations about this package, the website packagist could be useful. It shows informations (version, dependencies), ... for composer packages. See fluentdom/fluentdom.
This installs fluentdom in the default composer directory /vendor and generates a composer.json file; which is nice to update dependencies later.
Here's the generated content:
{
"require": {
"fluentdom/fluentdom": "~5.2"
}
}
But we wanted our dependency to be installed into my-custom-plugin/_inc/php, not into my-custom-plugin/_inc/php/vendor !
4/ Let's edit composer.json, and set the default directory parameter vendor-dir to empty.
{
"require": {
"fluentdom/fluentdom": "~5.2"
},
"config": {
"vendor-dir": ""
}
}
5/ Delete the my-custom-plugin/_inc/php/vendor directory as we don't need it anymore.
6/ Now that we have a composer.json file, we just have to run
composer.phar install
Or
composer.phar update
... and the magic happens ! Done !!! We have the dependencies installed, and an autoload.php file generated.
7/ The last thing to do is to include the autoload.php in your plugin :
require_once( plugin_dir_path( __FILE__ ) . '_inc/php/autoload.php' );
This was the way to achieve it without having a composer.json file.
If you have your composer.json file ready, skip steps 3 to 5.
I also suggest to read this blog post : 5 features to know about Composer PHP.
I'm trying to install a 3rd party bundle into my Smfony2 website. The web page for it is here. The documentation looked straight forward until I tried it. I found I needed to run composer.phar. When I ran "php composer.phar update", it updated a bunch of my bundles and completed without error, but didn't appear to install flickrapibundle. As instructed I add the line "ideato/flickr-api-bundle": "dev-master", to my composer.json file prior to running the command. Do I have to download the bundle and put it somewhere for composer to find it? I would think so, but the documentation makes no mention of it. When I tried to reload one my pages, I get the white screen of death. It's caused by an attempt to instantiate on object of the class.
So I am a new to doctrine, but I am not able to install a bundle at all. I am following the guide, but the "error" which I am getting is very unusual.
Anyhow, I add this lines into deps file:
[FOSRestBundle]
git=http://github.com/FriendsOfSymfony/FOSRestBundle.git
target=bundles/FOS/RestBundle
Then I do:
./bin/vendors install
And I get:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/sqlite.so' - /usr/lib/php5/20090626+lfs/sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
Your project seems to be based on a Standard Edition that includes vendors.
Try to run ./bin/vendors install --reinstall
So on this standard way I am not able to install it at all. Can somebody explain me what is the problem, because to me it looks like, the symfony vendors script doesnt recognize changes in deps file at all.
This happens when you've downloaded the Symfony2 Standard Edition from the website. The vendor install script checks to see if the vendor directories are git repositories, and if not, will throw this error. You can fix the situation in one of two ways:
you can either run the command that it suggests: php bin/vendors install --reinstall
or, you can remove the vendors directory, then run php bin/vendors install, which amounts to about the same thing
No need to install that. Just follow the steps in the url : http://mmoreramerino.github.com/GearmanBundle/installation.html