Upload
rob-loach
View
976
Download
2
Embed Size (px)
DESCRIPTION
Reinventing the wheel is always cumbersome. There are already a vast amount of Drupal modules out there. Leveraging PEAR, Packagist, and the PHP community, it's now easier to broaden the functionality spectrum of your Drupal websites even more. This session will introduce ways of integrating Drupal with the Composer package management system in order to take advantage of some of the best PHP libraries out there. http://portland2013.drupal.org/node/3468 http://robloach.github.io/drupalcon2013/
Citation preview
COMPOSERTHERE'SAMODULE(ORLIBRARY)FORTHAT!
Presentedby andRobLoach LarryGarfield
DEPENDENCYMANAGEMENTSUCKS
PHPSUCKSATSHARINGHowdoIgeta3rdpartylibrary?HowdoIloaditscode?Doesitdependonanything?WheredoIputthefiles?
SHARINGISHOWOPENSOURCEWORKS
SUCKINGATSHARINGISHOWOPENSOURCEDIES
BUTWE'REDRUPAL!Drupal.org:Greatformodules,nothingelseDuplicateworkelsewhereCodeisnotreusable
3RDPARTYCODEManuallydownloadintoyourmoduleandprayManuallydownloadinto/libraries/andprayManuallysetupextrahook
(...andpray)
"DOITMANUALLYANDPRAY"ISFORLOSERS
WE'REBETTERTHANTHAT,RIGHT?
ALITTLEHISTORY
PEARPHPExtensionandApplicationRepositoryFounded2000onthe"new"PHP4Requiredroottouseproperly(WTF?)ComplexprocessforaddingpackagesEasytogetwrong
SYMFONY2.0&PHPBBInitialalpha,SymfonyLiveParis,February2010PHPBB:We'rerebuildingonit!Symfony2uses3rdpartylibs(Doctrine,Monolog)
DEPENDENCYHELL
WENEEDADEPENDENCYSYSTEM!“It'sdumbtomakeitSymfonyspecific”
—JordiBoggiano
APRIL2011NilsAderman(PHPBB):libzypp->PHP
JordiBoggiano(Monolog):Packagist,lesssuckyfront-endforPEAR
WITHTHEIRPOWERSCOMBINED...ComposerisatoolfordependencymanagementinPHP.Itallowsyoutodeclarethedependentlibrariesyourprojectneedsanditwillinstalltheminyourprojectforyou.
UHH,WHAT?NomoreCopy/PasteoflibrariesResolvesdependenciesEachprojectdefinesitsownrequirementsPerformsbuildtasksLikemodule.infofiles,butforanylibrary
SEPTEMBER2011
1.2.3.4.5.6.
Packagist.orgMonologTwigPirumSwiftmailerPimpleSymfony
—JordiBoggiano
“I'dsayuntilearly2012itwasprettyunusable,yetpeopleusedit.Iguessthat's
howbadlyitwasneeded.”
PACKAGECOUNT
April2013:10,000packages(NotjustSymfony!)
LIBRARIESSomeofthelibrariesavailableviaComposerinclude...
SYMFONYPHPframeworkforwebapplications
http://symfony.com
ZENDFRAMEWORK
PHPframeworkforwebapplicationshttp://framework.zend.com
PHPUNIT
UnittestingsoftwareframeworkforPHPhttp://phpunit.de
GUZZLEHTTPclient&frameworkforbuildingRESTfulwebservice
clientshttp://guzzlephp.org
SOLARIUM
SolrclientlibraryforPHPhttp://solarium-project.org
ELASTICAElasticsearchsearchengine/databaseforPHP
http://elastica.io
MONOLOGLogtofiles,sockets,inboxes,databasesandvariousweb
serviceshttps://github.com/seldaek/monolog
ASSETICJavaScript,stylesheet,andimageassetmanagement
http://github.com/kriswallsmith/assetic
LET'SDOTHIS
COMPOSER.JSONBasemanifestfileforyourproject
{"name":"crell/mypackage","description":"Thispackageprovidessomeawesomeness.","require":{"guzzle/guzzle":"3.4.*"},"autoload":{"psr-0":{"MyName\\MyPackage":"src/"}}}
COMPOSERINSTALLInstallsalldependenciesforyourproject
$curl-sShttps://getcomposer.org/installer|phpAllsettingscorrectforusingComposerDownloading...
Composersuccessfullyinstalledto:composer.pharUseit:phpcomposer.phar$phpcomposer.pharinstall
FILESYSTEM-rw-rw-r--composer.json(yourcomposerfile)-rw-rw-r--composer.lock(generated)drwxrwxr-xsrc/(yourcode)drwxrwxr-xvendor/(everyoneelse'scode)
INDEX.PHPrequire_once__DIR__.'/vendor/autoload.php';
//Everyclassisnowyourstocommand!
//Autoloadondemand!Yourwork:zero.$client=newGuzzle\Http\Client('https://api.github.com');$request=$client->get('/user')->setAuth('user','pass');$response=$request->send();echo$response->getBody();
COMPOSERUPDATEUpdatesallinstalleddependenciestothelatestversion$phpcomposer.pharupdateLoadingcomposerrepositorieswithpackageinformationUpdatingdependencies
MORESCHEMAOPTIONSSchemaDocumentation
{"license":"MIT","require":{"php":">=5.3.10","guzzle/guzzle":"3.4.*"},"require-dev":{"phpunit/phpunit":"3.7.*"},"suggest":{"monolog/monolog":"Advancedloggingpackage"}}
PRIVATEREPOSITORIESSatisallowsyoutohostyourownComposerrepositories{"repositories":[{"type":"composer","url":"http://packages.example.org/"}],"require":{"company/package":"1.2.0","company/package2":"1.5.2","company/package3":"dev-master"}}
github.com/composer/satis
COMPOSERFORDRUPAL
DRUSHCOMPOSERAllowsrunningComposercommandsthroughDrush
$drushdlcomposer-8.x$drushcomposer
drupal.org/project/composer
COMPOSERAUTOLOADAutomaticallyloadsanygeneratedComposerfiles
-JimmyBerry drupal.org/project/composer_autoload
COMPOSERMANAGERBuildsComposerfilesfrommodulecomposer.jsonfiles
-ChrisPliakas drupal.org/project/composer_manager
DRUSHCOMPOSERMANAGERDownloadsandinstallsdependenciesforDrupalmodules$drushdlcomposer_managermonolog$drushencomposer_managermonolog$drushcomposer-managerLoadingcomposerrepositorieswithpackageinformationInstallingdependencies-Installingpsr/log(1.0.0)Downloading:100%
-Installingmonolog/monolog(1.5.0)Downloading:100%
drupal.org/project/composer_manager
COMPOSERINSTALLERSFacilitatesinstallationofDrupalmodules/themes/profiles
github.com/composer/installers
COMPOSERINSTALLERSAddacomposer.jsonfileinyourmodule/themedirectory
Addingthesetoeachmoduleiscumbersomethough,sothereis...
{"name":"dries/mymodule","type":"drupal-module","require":{"composer/installers":"*"}}
github.com/composer/installers
DRUPALPACKAGISTIndexesDrupalthemes/modulesforinstallationusingSatis
-
Stillveryearly
{"repositories":[{"type":"composer","url":"http://drugist.espend.de"}],"require":{"drupal/views":"*"}}
Haehnchen github.com/haehnchen/drupal-packagist
SPRINT:FRIDAYSprintwiththecommunityonFriday.Tasksforeveryskillset.
Mentorsareavailablefornewcontributors.OptionalFridaymorningworkshopwillhelpyousetup
communitytools.Drupaltag: Follow#composer @drupalmentoring
THANKYOUEvaluatethissessionat:
portland2013.drupal.org/node/3468