PHP-Tutorial: Erste Schritte mit Composer

Composer ist ein Abhängigkeitsmanager für PHP. Composer wird in allen modernen PHP-Frameworks (Symfony, Laravel) verwendet und ist eines der am meisten empfohlenen Tools, das grundlegende Probleme in den meisten Webprojekten löst.

Dieser Artikel führt Sie durch die grundlegende Verwendung von Composer und die erweiterte Verwendung für eine Teamumgebung. Außerdem wird erklärt, was Sie in Ihrem Bereitstellungsprozess nach der Integration von Composer ändern müssen.


Erste Schritte mit Composer

Composer löst die folgenden Probleme:

  • Abhängigkeitsauflösung für PHP-Pakete
  • Autoloading-Lösung für PHP-Pakete
  • Alle Pakete auf dem neuesten Stand halten

Machen Sie sich keine Sorgen, wenn Sie mit den Begriffen Abhängigkeitsauflösung und/oder automatisches Laden nicht vertraut sind. Hier ist ein Beispiel aus dem wirklichen Leben:

Angenommen, Sie möchten die installieren OpenTok V2 PHP Library, fahren Sie fort und laden Sie die OpenTok PHP Library herunter. Allerdings benötigt OpenTok guzzle und json-schema, um zu funktionieren. Wow! Werden Sie guzzle und json-schema manuell herunterladen? Da guzzle auch Abhängigkeiten hat, benötigt es den Event-Dispatcher von Symfony, um zu funktionieren. Und die Liste geht weiter..

Die meisten PHP-Pakete bauen auf anderen bekannten PHP-Paketen (wie z Symfony-Komponenten). Diese Strategie bedeutet, dass Entwickler stabile PHP-Bibliotheken wiederverwenden können.

Composer verarbeitet die Abhängigkeitsauflösung automatisch. Wenn Sie Tokbox installieren, werden automatisch alle erforderlichen Abhängigkeiten installiert.

Ein weiterer Vorteil der Verwendung von Composer ist das automatische Laden. Nachdem Sie eine Bibliothek installiert haben, müssen Sie die Dokumentation lesen, um zu sehen, welche Datei Sie verwenden sollten benötigen und die meisten Bibliotheken erfordern den Aufruf einer Autoloading-Funktion. Moderne PHP-Projekte erfordern mehrere externe Pakete, stellen Sie sich vor, Sie hätten über 10 Anforderungen und 10 Autoloading-Funktionen … schrecklich!

Composer übernimmt das automatische Laden automatisch, Sie müssen nur die folgende Codezeile schreiben, mit der Sie alle Ihre referenzierten Pakete laden können:

require_once 'vendor/autoload.php'

Nachdem Sie diese Zeile eingefügt haben, können Sie sofort mit der Verwendung jeder Bibliothek beginnen, auf die Sie verwiesen haben.

Schließlich hilft Ihnen Composer, genau wie alle anderen Paketmanager, alle Ihre Pakete auf dem neuesten Stand zu halten.

Weitere Vorteile der Verwendung von Composer

Es gibt andere Bereiche, in denen Composer Ihnen hilft, Ihren Arbeitsablauf zu verbessern. Hier sind die häufigsten Vorteile:

  • Integrieren Sie schnell Bibliotheken für Ihre SaaS-Anbieter (pusher, algolia, aws, opentok, twilio, stripe und viele andere). Holen Sie sich den Paketnamen und die Version, fügen Sie sie zu Ihrer composer.json hinzu und führen Sie den Installationsbefehl aus.
  • Fähigkeit, vorgefertigte Pakete zu verwenden, die allgemeine Probleme lösen. Sie benötigen ein Routing-Paket? suchen nach Routing auf packagist und legen Sie gleich los. Sie müssen mit hochgeladenen Dateien umgehen? Suchen nach Hochladen auf packagist und legen Sie gleich los.
  • Laden Sie alle Ihre Klassen automatisch mit Composer automatisch laden https://getcomposer.org/doc/04-schema.md#autoload. Nützlich zum loswerden benötigens in deinem Code.
  • Passen Sie Ihren Composer-Workflow an Komponisten-Skripte. Sie können Ihre eigenen Skripte vor/nach der Composer-Installation, vor/nach der Composer-Aktualisierung usw. ausführen.

Installation und Verwendung

Composer installieren

  • Linux & Mac:
    curl -sS [ | php
  • Windows installer:
    Visit and download the Composer-Setup.exe

Installing packages

Visit packagist.org, Composer’s default and only repository for packages. Search for your desired package. Let’s say we want to install Facebook’s PHP sdk, we just have to search for facebook php and open the first result. That’s where we get

require: "facebook/php-sdk": "dev-master"

However dev-master usually refers to the most recent build, that’s why we need to pick the latest stable version:

require: "facebook/php-sdk": "3.2.3"

and replace it by 3.2.* in order to allow composer to update whenever there are no backward compatible updates.

Start by creating the composer.json file:

{
  "require": {
    	"facebook/php-sdk": "3.2.*",
    }
}

launch your command line in the same directory and run composer install --no-dev

This will install the latest Facebook SDK available in 3.2.*.

Requiring packages

require_once 'vendor/autoload.php'

Updating packages

composer update --no-dev

The following command runs through all the packages referenced in your composer.json file and updates them if newer versions are available.

Common workflow in a team environment

Step 1: Install composer

and make sure every person in your team installs it as well.

Step 2: Exclude /vendor from revision control

Addvendor to your .gitignore. This will instruct Git to ignore all the vendor folder. In that way each developer (in a team) will have a local copy of the required libraries.

Check my quick tip on the recommended gitignore for PHP web projects.

Step 3: Create composer.json

Create composer.json file and add the required libraries, you can use the following as an example (it will install twig and facebook php SDK)

{
  "require": {
    	"facebook/php-sdk": "3.2.*",
        "twig/twig": "1.*",
  }
}

You can search for packages on packagist.org and/or follow installation instructions for your packages from github.

Step 4: Install the required packages

run composer install --no-dev to install the required packages.

Step 5: Team members can now run: composer install

Since the composer.jsonfile is committed via git, all developers having access to the repository can run composer install --no-dev to install the packages.

Step 6: Force autoloader optimization

It is possible to get an optimized autoloader by adding the following config parameter to your composer.json file

{
  "require": {
    	"facebook/php-sdk": "3.2.*",
    },
    "config": {
    	"optimize-autoloader": true
    }
}

The only drawback is that it will take more time to generate the autoloader but this is recommended for production.

Step 7: Follow packages and get update notifications

I recommend using versioneye.com (disclaimer: I am in no way affiliated with VersionEye), here’s their tagline: Follow your Packages and get notified about new versions. You can follow packages such as Twig, facebook-sdk and languages such as PHP. Every time there’s a new version they send you an email notification.

Step 8: Check for known security issues

I recommend using as well that lets you upload your composer.lock file and warns you about possible known security vulnerabilities for the packages you’re using. You can also integrate it in your workflow by using their API.

For the last step, we need Grunt or Gulp.

Step 9: Integrate with Build tools

Grunt and Gulp are build tools, used to automate common and recurrent tasks, such as minifying scripts, optimizing images, minifying stylesheets, compiling less/sass/stylus. The syntax below is based on Grunt’s configuration but it is very easy to migrate it for Gulp.

Whenever someone updates the composer.json, we need to manually run composer install --no-dev. Same thing when thecomposer.lock file gets updated (this file stores the version of each package). We can automate this by using the grunt-exec and grunt-watch plugins.

watch: {
        composer_json: {
                files: [ 'composer.json', 'composer.lock' ]Aufgaben: [ 'exec:composer_install' ]} } exec: { composer_install: { cmd: 'composer self-update && composer install --no-dev'Ausgangscode: [ 0, 255 ]
        } }

In diesem Befehl stellen wir sicher, dass Composer immer auf dem neuesten Stand ist (Composer Self-Update) und stellen sicher, dass alle unsere Pakete mit anderen Entwicklern synchronisiert sind (composer.lock). Das exitCode: [0, 255] lässt zu, dass der Befehl fehlschlägt, ohne den Grunt-Prozess zu beenden.

Bereitstellen der Anwendung

Nach der Integration von Composer müssen wir einen zusätzlichen Schritt zu unserem laufenden Bereitstellungsprozess hinzufügen composer install --no-dev nach Erhalt des neuen Codes. Dadurch wird sichergestellt, dass die erforderlichen Pakete auf dieselben Versionen aktualisiert werden, die jeder in Ihrem Team verwendet.

Immer noch nicht überzeugt?

Lernen Sie von den Besten. Beide Symfonie und Laravel Verwenden Sie Composer, um ihre Abhängigkeiten zu verwalten, die Anwendung automatisch zu laden/zu booten und die Pakete auf dem neuesten Stand zu halten.

Verpacken

Composer ist in der Tat ein großartiges Tool, das die Entwicklung von PHP-Projekten beschleunigt. Die Probleme, die es löst, treten in den meisten Projekten häufig auf. Die Integration von Composer in Ihr Projekt ist eine sehr einfache Aufgabe, besonders wenn Sie dem Schritt-für-Schritt-Tutorial in diesem Artikel folgen.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *