লারাভেল প্যাকেজ ডেভলপমেন্ট ( পার্ট - ১ )

Laravel Aug 8, 2018

প্রথমেই কথা না বাড়িয়ে নিচের ধাপগুলো অনুসরণ করি তারপর না হয় কিছু কথোপকথন হবে । ক্ষমা চেয়ে নিচ্ছি আমি বাংলা ইংরেজি মিক্সড করে লিখি তাই । আমি যেভাবে কাজ করি সেটাই শেয়ার করার চেষ্ঠা করছি মাত্র । Service Provider কি , view কি , route কি , লারাভেল কি , PHP কি এই ধরনের প্রশ্ন করা প্রোগ্রামারদের জন্য নয় এই পোস্ট নহে ।

১ . প্যাকেজের Folder Structure

এখানে আমরা একটা Calculator প্যাকেজ বানাবো । লারাভেল Application রুট ডিরেক্টরিতে আমরা packages নামে একটি Folder করবো তার ভিতরে আপনার নাম অথবা আপনার কোম্পানি নাম অথবা আপনার গিটহাব ইউজার নেম হয় সাধারণত। তার ভিতরে আপনার প্যাকেজের নাম থাকে আপনি চাইলে অন্য কোন নামও দিতে পারেন । কনফিউজ মনে হলে নিচের Folder Structure দেখে নিতে পারিঃ

We are going to use this packages folder instead of the vendor folder because files inside of our vendor folder should only be managed by composer. Once we have published our package we can then include it in our vendor folder using composer.

এখানে আমার Github ইউজারনেম shipu তাই আমি shipu নামে ফোল্ডার করেছি । এরপর প্যাকেজর নাম দিয়েছি । এভাবেই করতে হবে এমন কোন কথা নেই । আপনি চাইলে কিন্তু আপনার মত করে Folder Structure সাজাতে পারেন ।

২ . প্যাকেজের নাম এবং কম্পোজার Initiate করতে

কম্পোজার Initiate করতে টার্মিনালে প্যাকেজের ডিরেক্টরিতে যেতে হবে । আমাদের এই প্যাকেজের জন্য ডিরেক্টরি path হবে your_laravel_project/packages/shipu/calculatorএবং নিচের কমান্ডটি টার্মিনালে রান করুনঃ

composer init

এই কমান্ডটি আপনার প্যাকেজ ফোল্ডারে composer.jsonতৈরি করবে অনেকটা নিচের json ফাইলের মতঃ

{
    "name": "shipu/calculator",
    "description": "This demo package will do some calculations",
    "authors": [
        {
            "name": "Shipu Ahamed",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

অথবা আপনি উপরের কোডটা কপি করে আপনার প্যাকেজর মত মডিফাই করে composer.json ফাইল নিজে বানিয়ে নিতে পারেন কোন কমান্ড ছাড়াই ।

৩ . Application-এর composer.json এর সাথে আমাদের প্যাকেজ কিভাবে লোড করতে পারি

প্রত্যেক লারাভেল প্রজেক্টের রুট ডিরেক্টরিতে composer.json ফাইল আছে যেখানে লারাভেল Application এর ডিপেন্ডেন্সি গুলো Define করা থাকে ।

এখন composer.json এ autoload ব্লকে PSR-4এ আমরা আমাদের প্যাকেজের Namespace বলে দিতে হবে সাথে প্যাকেজের path । নিচের কোডটা তারই একটা Example:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/",
        "Shipu\\Calculator\\": "packages/shipu/calculator/src"
    }
}

এর পর নিচের কোডটি টার্মিনালে লারাভেল Root Application ডিরেক্টরিতে রান করাইঃ

composer dump

আপনি যখন নতুন আর একটা প্যাকেজ বানাবেন তখন এভাবেই Namespace বলে দিতে হবে । আপনার প্যাকেজ পাবলিশ হয়ে গেলে কিন্তু আর এটা দেয়া লাগবে না । এই প্রসেসটা শুধু মাত্র আপনার Development-এর জন্য ।

৪ . Service Provider কিভাবে তৈরি করতে পারি

প্রথমেই টার্মিনালে নিচের কমান্ডটা রান করি লারাভেলের Application রুট ডিরেক্টরিতেঃ

php artisan make:provider CalculatorServiceProvider

কমান্ডটা রান করলে একটা ফাইল Create হবে app/Providers/CalculatorServiceProvider.php এই Path-এ ।

আমারা এই ফাইলটিকে মুভ করে আমাদের প্যাকেজ ফোল্ডারে নিয়ে যেতে পারি । তাহলে ফাইলটি থাকবে packages/shipu/calculator/src/CalculatorServiceProvider.php এই Path-এ ।

.
Don’t forget to change your namespace to be your Vendor\Package_name.

Service Provider সম্পর্কে বিস্তারিত জানতে আপনি লারাভেল ডকুমেন্টেশন পড়তে পারেন ।

নতুন Service Provider লারাভেলের সাথে সংযুক্ত করতে config/app.php ওপেন করে providers[] এর অ্যারেতে অ্যাড করে নিতে হবে:

/*
 * Package Service Providers...
 */
Shipu\Calculator\CalculatorServiceProvider::class,
প্রত্যেক লারাভেল প্যাকেজের জন্য Service Provider থাকা আবশ্যক ।

৫ . প্যাকেজর Route ফাইল কিভাবে তৈরি করতে পারি

প্যাকেজের রুট ডিরেক্টরিতে srcএর মধ্যে routes.php নামে একটি ফাইল তৈরি করতে পারি । এরপর নিচের কোডটি অ্যাড করিঃ

<?php

Route::get('calculator', function(){
	echo 'Hello from the calculator package!';
});

আমাদের CalculatorServiceProvider-এ boot() মেথডে $this->loadRoutesFrom(__DIR__.'/routes.php');এই কোডটুকু যুক্ত করি :

public function boot()
{
    $this->loadRoutesFrom(__DIR__.'/routes.php');
}

php artisan serveটার্মিনালে রান করে http://localhost:8000/calculator ভিজট করি ।

সহজ নাহ অনেক । হুম অনেক সহজ । রাউট ফাইলটা সব সময় দরকার হবে নাহ আপানার প্যাকেজে তবে যদি দরকার হয় তখন এই স্টেপগুলো Follow করলেই হবে ।

৬ . Controller কিভাবে তৈরি করতে পারি

প্রথমেই টার্মিনালে নিচের কমান্ডটা রান করি লারাভেলের Application রুট ডিরেক্টরিতেঃ

php artisan make:controller CalculatorController

কমান্ডটা রান করলে একটা ফাইল Create হবে app/Http/Controllers/CalculatorController.php এই Path-এ ।

আমারা এই ফাইলটিকে মুভ করে আমাদের প্যাকেজ ফোল্ডারে নিয়ে যেতে পারি । তাহলে ফাইলটি থাকবে packages/shipu/calculator/src/CalculatorController.php এই Path-এ।

নিচের কোডটা কপি করে আপনার Controller এ পেস্ট করে দিনঃ

<?php

namespace Shipu\Calculator;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class CalculatorController extends Controller
{
    public function add( $a, $b )
    {
        echo $a + $b;
    }

    public function subtract( $a, $b )
    {
        echo $a - $b;
    }
}
Again, remember to change your namespace in your controller above toVendor\Package_name.

আমাদের CalculatorServiceProvider-এ register() মেথডে $this->app->make('Shipu\Calculator\CalculatorController');এই কোডটুকু যুক্ত করি :

public function register()
{
    // register our controller
    $this->app->make('Shipu\Calculator\CalculatorController');
} 

সর্বশেষে আমরা routes.php তে আরো কিছু রাউট যোগ করতে পারিঃ

Route::get('add/{a}/{b}', 'Shipu\Calculator\CalculatorController@add');

Route::get('subtract/{a}/{b}', 'Shipu\Calculator\CalculatorController@subtract');

এখন আমরা যদি http://localhost:8000/add/5/2 and http://localhost:8000/subtract/5/2 -এ ভিজিট করি তাহলে

এইতো হয়ে গেলো আমাদের প্যাকেজের Controller।

৭ . View কিভাবে তৈরি করতে পারি

আমরা যেটা করতে পারি সেটা হলো srcFolder-এর ভিতরে viewsFolder বানাতে পারি । তারপর নতুন একটা ফাইল তৈরি করি add.blade.phpনামে । আপনি চাইলে আপনার মত করে Folder - সাজাতে পারেন । যাই হোক add.blade.php এর ভিতরে নিচের কোডটুকু যুক্ত করিঃ

<!DOCTYPE html>
<html>
<head>
	<title>Calculator</title>
</head>
<body>
    <h1 style="text-align:center">
	Your Result 
	<span style="font-weight:normal">{{ $result }}</span>
    </h1>
</body>
</html>

আমরা তো জানি লারাভেলে resource/views এর মধ্যেে view File/Folder গুলো থাকে সাধারণত । কিন্তু আমাদের প্যাকেজে জন্য যদি view ফাইল যুক্ত করতে চাই তাহলে আমাদের CalculatorServiceProvider-এ register() মেথডে $this->loadViewsFrom(__DIR__.'/views', 'calculator');এই কোডটুকু যুক্ত করি :

public function register()
{
    ...
    ...
    ...

    $this->loadViewsFrom(__DIR__.'/views', 'calculator');
}

সর্বশেষে Calculator controller -এ add ফাংশনের মধ্যে নিচের কোডের মত কিছু পরিবর্তন করি যাতে করে আমাদের প্যাকেজের views ফোল্ডার থেকে view ফাইল গুলো কল করতে পারি ।

public function add($a, $b){
    $result = $a + $b;
    return view('calculator::add', compact('result'));
}

এখন আমরা যদি http://localhost:8000/add/5/2 -এ ভিজিট করি তাহলে


৮. প্যাকেজ Publishing

অনেকেই এই জায়গায় বেশ Confuse হয়ে যায় । তো আর নয় Confusion দেখি কিভাবে আমাদের Calculator প্যাকেজটা পাবলিশ করতে পারি ।

  • আমারা যে Calculator প্যাকেজটা বানালাম সেটা Github -এ আপলোড করি ।
  • এখন আমরা আমাদের প্রথম ভার্সন v1.0 রিলিজ করি ।কিভাবে রিলিজ করবেন জানা না থাকলে এই লিংকে দেখুন
  • এরপর নতুন একটা আক্যাঊন্ট করতে হবে এই https://packagist.org লিঙ্কে গিয়ে ।
  • এখন চট করে সাবমিট করে দিন আপনার প্যাকেজের গিটহাব লিংক । এরপরই আপনি আপনার প্যাকেজের কম্পোজার কমান্ডটা পেয়ে যাবেন । কমান্ডটা এইরকম হবে
composer require shipu/calculator

টেস্টিং এর জন্য আপনি চাইলে নতুন লারাভেল প্রজেক্টে এই কমান্ডটি রান করে দেখতে পারেন । আপনি যখন আপনার প্যাকেজের নতুন রিলিজ দিবেন তখন Auto Update যেন packagist.org -এ হয়ে যায় তার জন্য এই লিংকে একটু ঘুরে আসেন

লারাভেল প্যাকেজ সম্পর্কে আর জানতে লারাভেল ডকুমেন্টেশন পড়তে পারেন । এরপরও যদি কষ্ট হয় তবে আপনি প্যাকেজ Development করার জন্য আমার একটা প্যাকেজ আছে Laratie চাইলে ইন্সটল করে দেখতে পারেন ।

এইতো এভাবেই লারাভেল প্যাকেজ তৈরী করে থাকি আমি । প্যাকেজ বানাতে থাকেন সামনের পার্টে দেখাবো প্যাকেজ বানানোর আরো কিছু খুঁটিনাটি ।

ততক্ষণের জন্য ভালো থাকবেন আর আমার ভুল ত্রুটিগুলো ক্ষমা করবেন । খুব ভালো করে লিখতে জানি না তবু চেষ্টা করেছি । আল্লাহ্‌ হাফেজ ।

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.