Composer untuk programmer PHP, kenapa anda perlu menggunakannya

3

Jika anda salah seorang pengaturcara PHP, anda pastinya pernah mengalami situasi di mana anda terpaksa menulis kod-kod aturcara untuk sesuatu fungsi tertentu seperti contoh untuk fungsi log masuk, pendaftaran pengguna, menjana fail PDF atau Excel, dan lain-lain lagi. Penggunaan rangkakerja seperti CakePHP atau CodeIgniter belum tentu dapat membantu, kerana ada sesetengah fungsi yang kita perlukan tidak terdapat pada rangkakerja tersebut.

Apa itu Composer?

Composer merupakan Dependency Manager untuk PHP yang mana ianya akan menguruskan keperluan-keperluan pada aplikasi. Ianya merupakan satu utiliti command-line yang digunakan untuk memasang pakej. Ini bermaksud Composer akan memuat-turun pakej-pakej yang diperlukan dan menguruskan mereka semua di satu lokasi yang khusus.

Composer terdiri daripada 2 bahagian;

  1. Utiliti command-line
    Utiliti ini perlu dipasang pada komputer dan dijalankan pada Command (Windows) atau Terminal (Unix, Mac OS X, Linux). Ia mengandungi arahan-arahan tertentu untuk memasang dan mengemaskini pakej.
  2. Repository
    Lokasi utama pakej-pakej yang boleh kita gunakan. Repository utama ialah di https://packagist.org, di mana semua pakej-pakej yang tersenarai di laman web ini diambil daripada Github dan lain-lain.

Composer boleh dipasang pada pelbagai sistem operasi; Windows, Mac OS X dan juga Linux, dan bergantung sepenuhnya kepada PHP. Jadi, pastikan komputer anda telahpun mempunyai perisian PHP sebelum menggunakan Composer.

Ini bukanlah konsep yang baru yang diperkenalkan, malahan Composer dibangunkan berinspirasikan npm daripada Node.js dan Bundler daripada Ruby. Dengan penggunaan Composer, kita boleh menghasilkan aplikasi menggunakan pakej atau library dari pengaturcara lain dengan mudah sekali.

Kenapa Perlukan Composer?

Sebelum adanya Composer, sudah menjadi trend di dalam dunia PHP pengaturcara re-invent the wheel, bermaksud membangunkan sendiri fungsi-fungsi atau modul-modul yang diperlukan dalam aplikasi web, ataupun mendapatkan kod-kod sumber terbuka lain dan dipasang pada aplikasi masing-masing. Ini secara tidak langsung menimbulkan masalah apabila kod-kod yang digunakan mempunyai bug atau error dan perlu dikemaskini.

Contoh aplikasi web yang mempunyai beberapa module.

Contoh aplikasi web yang mempunyai beberapa module.

Contoh pada gambar di atas merupakan salah satu sistem yang pernah saya bangunkan beberapa tahun yang lepas, di mana Composer masih belum wujud. Setiap satu module perlu dibangunkan sendiri ataupun didapati daripada beberapa laman web yang lain.

Contoh aplikasi yang mempunyai banyak module tetapi menggunakan pakej luar yang lain.

Kini, dengan adanya Composer, beberapa module di dalam sistem tersebut boleh digantikan dengan pakej-pakej yang sesuai untuk digunakan. Dengan ini, masa pembangunan sistem juga menjadi lebih cepat dan lebihan masa yang ada boleh digunakan untuk menjalankan pengujian sistem dengan lebih baik (menggunakan Unit Test, Acceptance Test atau Functional Test).

Dengan adanya package manager seperti Composer, kita boleh mendapatkan fungsi-fungsi tambahan dengan mudah, malahan proses mengemaskini pun hanya memerlukan satu baris arahan sahaja.

Kelebihan Composer ialah memasang pakej-pakej yang diperlukan pada per-project basis, bermaksud setiap satu aplikasi yang ingin dibangunkan tidak terhad kepada versi pakej yang diperlukan, ianya boleh menggunakan versi terdahulu ataupun versi terkini mengikut keperluan.

Bagaimana Composer Berfungsi?

Setiap satu projek yang ingin menggunakan Composer memerlukan satu fail iaitu composer.json. Ia merupakan fail yang mengandungi maklumat berkenaan dengan projek dan juga pakej-pakej yang diperlukan. Berikut adalah satu contoh fail composer.json yang diambil daripada projek Laravel 5.

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "laravel/framework": "5.0.*"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.0",
        "phpspec/phpspec": "~2.1"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php -r \"copy('.env.example', '.env');\"",
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    }
}

Projek Laravel 5 ini memerlukan pakej laravel/framework untuk berfungsi. Jika dilihat pada pakej ini pula, ia juga memerlukan beberapa pakej lain untuk berfungsi. Lihat pada bahagian “require” dan “require-dev”.

{
    "name": "laravel/framework",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "homepage": "http://laravel.com",
    "support": {
        "issues": "https://github.com/laravel/framework/issues",
        "source": "https://github.com/laravel/framework"
    },
    "authors": [
        {
            "name": "Taylor Otwell",
            "email": "taylorotwell @ gmail.com"
        }
    ],
    "require": {
        "php": ">=5.4.0",
        "ext-openssl": "*",
        "ext-mcrypt": "*",
        "ext-mbstring": "*",
        "classpreloader/classpreloader": "~1.2",
        "danielstjules/stringy": "~1.8",
        "doctrine/inflector": "~1.0",
        "ircmaxell/password-compat": "~1.0",
        "jeremeamia/superclosure": "~2.0",
        "league/flysystem": "~1.0",
        "monolog/monolog": "~1.11",
        "mtdowling/cron-expression": "~1.0",
        "nesbot/carbon": "~1.0",
        "psy/psysh": "0.4.*",
        "swiftmailer/swiftmailer": "~5.1",
        "symfony/console": "2.6.*",
        "symfony/debug": "2.6.*",
        "symfony/finder": "2.6.*",
        "symfony/http-foundation": "2.6.*",
        "symfony/http-kernel": "2.6.*",
        "symfony/process": "2.6.*",
        "symfony/routing": "2.6.*",
        "symfony/security-core": "2.6.*",
        "symfony/translation": "2.6.*",
        "symfony/var-dumper": "2.6.*",
        "vlucas/phpdotenv": "~1.0"
    },
    "replace": {
        "illuminate/auth": "self.version",
        "illuminate/bus": "self.version",
        "illuminate/cache": "self.version",
        "illuminate/config": "self.version",
        "illuminate/console": "self.version",
        "illuminate/container": "self.version",
        "illuminate/contracts": "self.version",
        "illuminate/cookie": "self.version",
        "illuminate/database": "self.version",
        "illuminate/encryption": "self.version",
        "illuminate/events": "self.version",
        "illuminate/exception": "self.version",
        "illuminate/filesystem": "self.version",
        "illuminate/foundation": "self.version",
        "illuminate/hashing": "self.version",
        "illuminate/http": "self.version",
        "illuminate/log": "self.version",
        "illuminate/mail": "self.version",
        "illuminate/pagination": "self.version",
        "illuminate/pipeline": "self.version",
        "illuminate/queue": "self.version",
        "illuminate/redis": "self.version",
        "illuminate/routing": "self.version",
        "illuminate/session": "self.version",
        "illuminate/support": "self.version",
        "illuminate/translation": "self.version",
        "illuminate/validation": "self.version",
        "illuminate/view": "self.version"
    },
    "require-dev": {
        "aws/aws-sdk-php": "~2.4",
        "iron-io/iron_mq": "~1.5",
        "pda/pheanstalk": "~3.0",
        "predis/predis": "~1.0",
        "mockery/mockery": "~0.9",
        "phpunit/phpunit": "~4.0"
    },
    "autoload": {
        "classmap": [
            "src/Illuminate/Queue/IlluminateQueueClosure.php"
        ],
        "files": [
            "src/Illuminate/Foundation/helpers.php",
            "src/Illuminate/Support/helpers.php"
        ],
        "psr-4": {
            "Illuminate\\": "src/Illuminate/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-master": "5.0-dev"
        }
    },
    "suggest": {
        "aws/aws-sdk-php": "Required to use the SQS queue driver (~2.4).",
        "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).",
        "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers (~5.0).",
        "iron-io/iron_mq": "Required to use the iron queue driver (~1.5).",
        "league/flysystem-aws-s3-v2": "Required to use the Flysystem S3 driver (~1.0).",
        "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).",
        "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).",
        "predis/predis": "Required to use the redis cache and queue drivers (~1.0)."
    },
    "minimum-stability": "dev"
}

Untuk pemahaman yang lebih mudah, lihat gambarajah di bawah ini.

Setiap satu pakej boleh mempunyai dependencies kepada pakej yang lain.

Setiap satu pakej boleh mempunyai dependencies kepada pakej yang lain.

Daripada gambar di atas, kita boleh lihat:

  • Sistem Tempahan Kenderaan menggunakan rangkakerja Laravel yang bergantung kepada pakej laravel/framework.
  • Manakala laravel/framework pula bergantung kepada beberapa pakej lain contohnya symfony/http-kernel.
  • Pakej symfony/http-kernel juga memerlukan pakej lain untuknya sebagai contoh symfony/http-foundation.

Setiap satu pakej boleh bergerak secara sendirian, contohnya nesbot/carbon manakala ada juga pakej yang memerlukan sokongan pakej lain untuk berfungsi, sebagai contoh pakej symfony/http-kernel. Semua hubung kait antara satu pakej ke satu pakej lain ini sangat komplikated untuk dilakukan secara manual, tetapi dengan Composer ianya cukup mudah dilaksanakan.

Pemasangan Composer

Sebelum anda memasang Composer pada komputer anda, pastikan perisian PHP telah sedia terpasang terlebih dahulu. Ini kerana Composer bergantung sepenuhnya kepada PHP untuk berfungsi. Rujuk tutorial memasang Apache, MySQL dan PHP pada platform Windows.

  • Layari laman web https://getcomposer.org dan muat turun fail pemasangan Composer untuk Windows.

    Pemasangan Composer pada Windows

    Jalankan installer Composer yang telah dimuat turun.

    Pilihan Shell yang akan dipasang

    Pilihan tambahan jika anda ingin menambah Shell Menus. Boleh abaikan bahagian ini.

    Pilih fail PHP untuk digunakan.

    Tetapkan lokasi fail PHP untuk digunakan oleh Composer. Pastikan anda telah mempunyai Apache dan PHP di dalam komputer anda.

    Paparan untuk tujuan rujukan sebelum pemasangan Composer berjalan.

    Paparan untuk rujukan anda. Tekan Install untuk mulakan pemasangan Composer.

    Tunggu fail composer.phar dimuat turun ke komputer.

    Tunggu fail composer.phar dimuat turun ke komputer.

    Paparan mengenai maklumat pemasangan Composer.

    Setelah selesai, baca maklumat yang disampaikan pada paparan ini.

    Pemasangan Composer selesai.

    Yup, sudah selesai!

    Setelah selesai, cuba arahan berikut pada Command:

    composer

    Sekiranya anda mendapat output seperti berikut bermaksud pemasangan Composer anda berjaya.

    install-composer-windows-08

  • Dengan menggunakan Terminal, jalankan arahan berikut:

    curl -sS https://getcomposer.org/installer | php
    mv composer.phar /usr/local/bin/composer

    Setelah selesai, cuba arahan berikut:

    composer

    Sekiranya anda mendapat output seperti berikut bermaksud pemasangan Composer anda berjaya.

    Pemasangan Composer Berjaya

Penggunaan

Kita lihat contoh bagaimana menggunakan Composer untuk memasang rangkakerja Laravel 5 dengan cepat dan mudah.

Nota:

Untuk contoh ini, saya andaikan anda telah tahu menggunakan aplikasi Command pada Windows ataupun Terminal pada Mac OS X/Linux.

Pada tetingkap Terminal, taipkan arahan berikut:

cd ~/Sites
composer create-project laravel/laravel web-app --prefer-dist

Composer akan mendapatkan semua fail yang diperlukan untuk memasang rangkakerja Laravel pada lokasi /Users/nama-anda/Sites/web-app. Proses ini mengambil masa beberapa minit, bergantung kepada kelajuan akses Internet anda. Tunggu sehingga anda mendapat makluman pemasangan telah selesai seperti gambar di bawah.

Pemasangan rangkakerja Laravel 5 selesai dalam masa kurang daripada 5 minit.

Pemasangan rangkakerja Laravel 5 selesai dalam masa kurang daripada 5 minit.

Dengan menggunakan satu arahan sahaja anda boleh memasang rangkakerja Laravel dengan cepat dan mudah. Bagus, kan?

Kesimpulan

Untuk menghasilkan aplikasi web menggunakan PHP dengan cepat dan mudah, penggunaan Composer dapat membantu merealisasikan impian anda. Terdapat banyak pakej-pakej di luar sana yang boleh digunakan untuk memudahkan kerja anda.

Buangkan sikap prejudis anda terhadap pengaturcara luar yang menghabiskan masa mereka menulis kod aturcara untuk kegunaan semua tanpa mengharapkan balasan, dan mereka bukanlah jenis manusia yang akan ‘menanam’ malware atau backdoor di dalam kod aturcara mereka.

Komen / Pendapat / Pandangan

comments

Share.

About Author

Trainer Sifoo.com // Web Application Developer and Web Designer in a wide variety of business applications. Particularly interested in Web Application Development using PHP/MySQL, jQuery, Laravel, Joomla! and WordPress.

3 Comments

  1. Pingback: Pengenalan kepada Laravel ~ Sifoo.com

Leave A Reply