Why you should consider laravel as your go to framework of choice


Recently I was in a debate with 3 other very great software professional at Basis Software Expo, 2017 about Laravel vs Django. I know, comparing between these two is like comparison between orange and apple. Actually, our main target was to present the feature set that these two frameworks offer but in a form of debate so that, people especially the newcomers get a good grasp on these frameworks. We had a very limited time to debate, so we could not focus on all the parts. So, I think why not write a blog post about the topic and thus comes this blog post.

Laravel is a very popular web framework, it is the most popular php framework and probably the most popular web framework of any language as well. Though it is comparatively very new, but it has some awesome features. So, here is the features that you should know about laravel-

  • Laravel has a great community. It is huge and very friendly.
  • It has arguably the best learning site on the Interner, Laracasts. Jeffrey Way is a great teacher.
  • Laravel provides a whole eco-system. It ensures developer’s happiness from development to deployment.
    • Development: Valet, Homedtead
    • Built in Testing: both unit and browser testing
    • Code Review: NitpickCI
    • Asset Management: Elixir, Laravel Mix
    • Great Task runner: Laravel Envoy
    • Server Provisioning: Forge
    • Zero Downtime Deployment: Enroyer
    • Monitoring Tool: Cachet
  • Great ORM, built-in Queue System, Out of the box Redis support.
  • Scaffolding Tools: Spark, Backpack
  • Stable Release Cycle and LTS support. A new version of laravel comes every 6 months and a long-term support version comes in every 2 years.
  • Great features, like- realtime broadcasting (Echo), Multiple notification channels, Task schedular, Multiple drivers for most of the components(session, cache, queue, mail, events etc.)
  • Laravel has some great first party packages
    • Payment Gateway: Cashier
    • OAuth2 Server: Passport
    • Social Authentication: Socialite(support more than 80 sites)
    • Full-text search: Scout
  • Laravel is very beginner friendly with very little entry barrier.
  • Migration, Template Engine with markdown support.
  • Great Command Line Utility: Artisan.
  • Tons of community driven packages.

To be honest, Laravel is the best thing that happens to me in last 2-3 years. It prevented me from leaving php. I also wrote a bestseller book on Laravel in Bengali. If you are interested, you can also look into it.

লারাভেল ভ্যালে ইনস্টলেশন


গত পরশু(৭ মে, ২০১৬) লারাভেলের নতুন ডেভেলপমেন্ট এনভায়রনমেন্ট লারাভেল ভ্যালে(Valet) রিলিজ দেয়া হয়েছে। এটা ম্যাক অপারেটিং সিস্টেমের জন্য একটা সিম্পলিফায়েড ডেভেলপমেন্ট এনভায়রনমেন্ট। এটা ইনস্টল এবং ব্যবহার করা খুবই সহজ। আপনি শুধুমাত্র আপনার পিসিতে একটি প্রজেক্ট ইনস্টল দিবেন এবং প্রজেক্টের ফোল্ডারের নামের সাথে .dev যুক্ত করে ব্রাউজারে সেটি ব্রাউজ করতে পারবেন। ভ্যালে কি, এটা কিভাবে কাজ করে, এটা নিয়ে এডাম ওয়াদান একটি চমৎকার ভিডিও তৈরি করেছেন। সেটি দেখুন।

যারা এর পূর্বে লারাভেলের হোমস্টিড ব্যবহার করতেন, তারা নিশ্চয়ই জানেন সেটা ব্যবহারের জন্য আপনাকে অনেকগুলো ডিপেন্ডেন্সি ইনস্টল করতে হয়। যেমন- ভার্চুয়াল বক্স, ভ্যাগরেন্ট ইত্যাদি। এগুলি ইনস্টল করার পর লারাভেলের হোমস্টিড বক্স ইনস্টল করতে হয়। এই ফাইলগুলি আকারে বেশ বড়, প্রায় কয়েক গিগাবাইট। তাই ইনস্টল করতে প্রচুর সময় লাগে। এরপর প্রত্যেকটা সাইট এড করার সময় হোমস্টিডের yaml ফাইল এডিট করতে হয়। এরপর সেটা প্রভিশনিং করে আপনার মেশিনের hosts ফাইল এডিট করতে হয়। সে তুলনায় ভ্যালে ইনস্টল করা খুবই সহজ এবং এর সাইজও অনেক ছোট। এটা পিএইচপির বিল্ট-ইন সার্ভার ব্যবহার করে, ফলে এটা ব্যবহার করার জন্য আপনাকে এপাচি, এনজিনেক্স বা এ ধরনের ওয়েব সার্ভার ব্যবহার করতে হবে না। শুধুমাত্র পিএইচপি এবং মাইসিক্যুয়েল ইনস্টল করা থাকলেই আপনি ভ্যালে ব্যবহার করতে পারবেন। চলুন দেখি একেবারে নতুন একটি ম্যাক মেশিনে আপনি কিভাবে ভ্যালে ইনস্টল করবেন।

প্রথমেই আপনাকে হোমব্রু ইনস্টল করতে হবে। এটা ম্যাকের জন্য একটি প্যাকেজ ম্যানেজার, যার মাধ্যমে আপনি বিভিন্ন ডেভেলপার টুলস খুব সহজেই ইনস্টল করতে পারবেন। আপনি যেহেতু ম্যাক ইউজার, অবশ্যই এটা আপনার মেশিনে ইনস্টল থাকা উচিৎ। এটা ইনস্টল করা খুবই সহজ। আপনি শুধুমাত্র নিচের কমান্ডটি টার্মিনালে চালালেই হবে।

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

এরপর এর মাধ্যমে পিএইচপি ইনস্টল করতে হবে। এটা করতে নিচের কমান্ডটি রান করুন-

brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew install php70

যেহেতু আপনি ম্যাক অপারেটিং সিস্টেম ব্যবহার করছেন এটিতে ইতোমধ্যে একটি পিএইচপি ভার্সন ইনস্টল করা থাকে। উপরের কমান্ডের মাধ্যমে আপনি পিএইচপির লেটেস্ট ভার্সন পিএইচপি ৭ ইনস্টল করলাম।

এবার কম্পোজার ইনস্টল করবেন নিচের কমান্ডের মাধ্যমে-

brew install composer

এবারে মাইসিক্যুয়েল ইনস্টল করবেন নিচের কমান্ডের মাধ্যমে-

brew install mysql

মাইসিক্যুয়েল সার্ভার স্টার্ট করতে নিচের কমান্ডটি দিতে পারেন-

mysql.server start

মাইসিক্যুয়েলের যে ইনস্ট্যান্সটি ইনস্টল হয়েছে সেটার ইউজারনেম root এবং পাসওয়ার্ড হিসেবে আছে একটা এম্পটি স্ট্রিং। আপনি টার্মিনাল থেকে নিচের কমান্ডের মাধ্যমে মাইসিক্যুয়েল এক্সেস করতে পারবেন।

mysql -uroot

এবারে লারাভেল ভ্যালে ইনস্টল করার পালা। এর জন্য টার্মিনালে নিচের কমান্ডটি দিন-

composer global require laravel/valet

ইনস্টল হয়ে গেলে প্রথমে ভ্যালের বিভিন্ন ডিপেন্ডেন্সি ইনস্টল করুন নিচের কমান্ডের মাধ্যমে-

valet install

এই কমান্ডটি আপনার মেশিনের সুডো পাসওয়ার্ড চাইবে কারন এটি dsnmasq নামে একটি ইউটিলিটি আপনার সিস্টেমে ইনস্টল করবে। এটি করা হয়ে গেলে আপনি যে ফোল্ডারে আপনার প্রজেক্টগুলো রাখতে চান, সেটিতে প্রবেশ করুন। তারপর নিচের কমান্ডটি দিন।

cd project-folder
valet park

ব্যস, আপনার সব কাজ শেষ। ধরুন আমরা এখন একটি নতুন প্রজেক্ট তৈরি করবো ব্লগ নামে। তাহলে প্রথমে এই নামে একটি লারাভেল প্রজেক্ট তৈরি করি।

composer create-project laravel/laravel blog --prefer-dist

এবার আমরা ব্রাউজারে যদি blog.dev ব্রাউজ করি তাহলেই প্রজেক্টটি দেখতে পাবো।

শুধু তাই নয়, আপনি যদি এখন এই প্রজেক্টটি আপনার কো-ওয়ার্কারদের সাথে শেয়ার করতে চান সেটিও করতে পারবেন খুব সহজে। আপনি ব্লগ প্রজেক্টের ডিরেক্টরিতে প্রবেশ করুন। তারপর নিচের কমান্ডটি দিন।

cd blog
valet share

এই কমান্ডের মাধ্যমে আপনি একটি ইউআরএল আপনার টার্মিনালে দেখতে পারবেন। এছাড়াও সেটি আপনার ক্লিপবোর্ডে কপি করা অবস্থাতেও পাবেন, শুধুমাত্র পেস্ট করলেই চলবে। কি অসাধারন!

ভ্যালে শুধুমাত্র লারাভেলই না আরো অনেক পিএইচপি প্রজেক্টের সাথে আউট অব দ্য বক্স কাজ করে। এছাড়া আপনি চাইলে নিজেও যে কোন প্রজেক্টের জন্য ভ্যালে ড্রাইভার তৈরি করে নিতে পারেন, যা আসলে খুবই সহজ। বিস্তারিত জানতে ভ্যালের অফিশিয়াল ডকুমেন্টেশন দেখতে পারেন।

আপনি নিশ্চয়ই অবাক হয়েছেন, লারাভেল ভ্যালে কিভাবে এতসব করে? এটার কার্যপদ্ধতি সম্পর্কে বিস্তারিত জানতে এখানে দেখতে পারেন।

লারাভেলে একাধিক রাউটিং ফাইলের ব্যবহার


লারাভেলে চমৎকার একটি রাউটিং লাইব্রেরি সহ এসেছে, যা সিম্ফনির রাউটারের উপর ভিত্তি করে তৈরি করা। আর এটি ব্যবহার করাও খুব সহজ। এর চমৎকার এপিআই সেল্ফ এক্সপ্লেনারি। যে কেউ রাউটারের কোড দেখলেই বুঝতে পারবে, এটি কি কাজ করবে। চলুন একটু উদাহরন দেখি-

লারাভেলের রাউটগুলি ডিক্লেয়ার করা থাকে app/Http/routes.php ফাইলে। সমস্যা হচ্ছে যখন অনেক বড় কোন প্রজেক্টে কাজ করতে হয়, তখন রাউট ফাইলটির আকার অনেক বড় হয়ে যায় এবং একটি মাত্র ফাইলে রাউটগুলি ম্যানেজ করা খুবই কষ্টসাধ্য হয়ে পড়ে। এর সমাধান করা যায় খুব সহজেই, রাউটগুলি অনেকগুলি ফাইলে ভাগ করে নিলে।

এটা করা অত্যন্ত সহজ। এ উদাহরনে আমরা এমন একটি টেস্টকেস চিন্তা করবো, যেখানে এটি ফাইলে প্রজেক্টের ওয়েব রাউটগুলি থাকবে এবং অন্য একটি ফাইলে এপিআই রাউটগুলি থাকবে। এর জন্য আমরা প্রথমেই আমাদের রাউট ফাইলের নাম পরিবর্তন করে রাখি web_routes.php. এরপর একটি ডিরেক্টরিতে api_routes.php নামে আরো একটা ফাইল তৈরি করি। এরপর আমরা app/Providers/RouteServiceProvider.php ফাইলটি ওপেন করি। এই ক্লাসটির প্রথমেই আছে $namespace নামে একটি প্রটেক্টেড ভ্যারিয়েবল। এটিকে রিনেম করে $webNamespace করি এবং এর ঠিক নিচেই $apiNamespace নামে আরো একটি ভ্যারিয়েবল ডিক্লেয়ার করি। এ উদাহরনের জন্য আমরা ধরে নেই আমাদের সবগুলো ওয়েব কন্ট্রোলার এবং এপিআই কন্ট্রোলার থাকবে যথাক্রমে app/Http/Controllers ফোল্ডারের Web এবং Api নামের ফোল্ডারে। তাহলে সেক্ষেত্রে এ কন্ট্রোলারগুলোর নেমস্পেসও এ অনুসারেই হবে। এরপর map মেথডে ফাইলদুটোকে রেজিস্টার করে দিতে হবে। সেটি করার পর ফাইলটি দেখতে হবে এরকম-

এরপর থেকে আপনি আপনার ওয়েবসাইটের রাউটগুলি ওয়েব রাউট ফাইলে এবং এপিআই রাউটগুলি এপিআই রাউট ফাইলে আলাদা করে রাখতে পারবেন। আপনি আপনার প্রয়োজনমত যতগুলি ইচ্ছা ফাইলে রাউটগুলি ভাগ করে রাখতে পারেন। আর রাউট ফাইলের সংখ্যা যদি বেড়ে যায়, তাহলে সেগুলিকে Http ফোল্ডারের মধ্যে Routes নামে একটি ফোল্ডারে রাখতে পারেন। সেক্ষেত্রে ম্যাপ মেথডে শুধু রাউট ফাইলের পাথটি ঠিক করে দিলেই হবে।

লারাভেল হোমস্টিড ইনস্টলেশন


লারাভেল একটি চমৎকার পিএইচপি ফ্রেমওয়ার্ক। যারা লারাভেল শিখতে চায় তারা প্রথমেই যে সমস্যাটার কথা বলেন, সেটি হচ্ছে এর ডেভেলপমেন্ট এনভায়রনমেন্ট সেটআপ করা। লারাভেলের অনেকগুলি ডিপেন্ডেন্সি আছে। যেমন লারাভেল ৫.২ এর সার্ভার রিকোয়ারমেন্ট হচ্ছে-

  • PHP >= 5.5.9
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension

এছাড়া পুরনো ভার্সনের লারাভেলে পিএইচপির mcrypt এক্সটেনশন ব্যবহার করা হতো। এগুলি সেটআপ করা ঝামেলার এবং সময়সাপেক্ষ। এছাড়াও ওয়েব সার্ভার যেমন- এনজিনেক্স, ডেটাবেজ সার্ভার, রেডিস সার্ভার, মেমক্যাশ সার্ভার, কিউ সার্ভার যেমন- বিনস্টকড ইনস্টল এবং কনফিগার করা অত্যন্ত ঝামেলার। এছাড়া কিছু টুল যেমন- বিনস্টকড উইন্ডোজ মেশিনে ইনস্টলও করা যায় না।

লারাভেল এ ঝামেলা থেকে বাঁচানোর জন্য খুব সহজ একটি উপায় তৈরি করে রেখেছে। এটি হচ্ছে লারাভেলের ডেভেলপমেন্ট এনভায়রনমেন্ট যা হোমস্টিড নামে পরিচিত।laravel_vagrant

হোমস্টিড ভ্যাগরেন্ট নামে একটি সার্ভিস ব্যবহার করে তৈরি করা হয়েছে, যা আসলে ভার্চুয়াল মেশিনের একটি এবস্ট্রাকশন। ভার্চুয়াল মেশিন কি আমরা সবাই জানি। এটি হচ্ছে আপনার মেশিনের বা অপারেটিং সিস্টেমের ভেতরে চলমান আরেকটি মেশিন বা অপারেটিং সিস্টেম। বর্তমানে প্রচলিত সবচেয়ে জনপ্রিয় দুটি ভার্চুয়াল মেশিন সফটয়্যারের নাম হচ্ছে ভার্চুয়াল বক্স এবং ভিএমওয়্যার। হোমস্টিড এ দুটি প্রোভাইডারই সাপোর্ট করে, তবে এটির ডিফল্ট প্রোভাইডার হলো ভার্চুয়াল বক্স। এ উদাহরনেও আমরা ভার্চুয়াল বক্সই ব্যবহার করবো। এর প্রধান কারন হচ্ছে ভিএমওয়্যারের ভ্যাগরেন্ট প্রোভাইডার কিনতে হয় যেখানে ভার্চুয়াল বক্সেরটা ফ্রি। ভার্চুয়াল মেশিন সম্পর্কে আরো বিস্তারিত জানতে এখানে ঢু মারতে পারেন।

অনেক কথা হলো, এবার চলুন কিভাবে আপনি আপনার পিসিতে হোমস্টিড সেটআপ করবেন তা দেখি। প্রথম ধাপ হচ্ছে ভার্চুয়াল বক্স ডাউনলোড করে ইনস্টল দেয়া। এটি খুবই সহজ। আপনি ভার্চুয়াল বক্সের অফিশিয়াল ওয়েবসাইট থেকে অপারেটিং সিস্টেমের জন্য প্রয়োজনীয় ইনস্টলারটি ডাউনলোড করে ইনস্টল করে নিবেন। এরপর ভ্যাগরেন্টের অফিশিয়াল সাইট থেকে ইনস্টলার ডাউনলোড করে সেটিও ইনস্টল করে নেবেন। লক্ষ্য রাখবেন, এ দুটি সফটয়্যারের ইনস্টল লোকেশন যেন আপনার পাথ ভ্যারিয়েবলে থাকে। বাই ডিফল্ট এটি আপনার পাথেই ইনস্টল হবার কথা, তাই এ নিয়ে চিন্তা না করলেও চলবে। এ অবস্থায় আপনি যদি আপনার টার্মিনালে নিচের কমান্ডটি লিখেন, তাহলে দেখবেন-

~ vagrant -v
1.8.1

এবার আপনি নিচের কমান্ডটির মাধ্যমে হোমস্টিড বক্স এড করুন আপনার মেশিনে-

vagrant box add laravel/homestead

এই কমান্ডটি বেশ খানিকটা সময় নেবে, কারন এর মাধ্যমে প্রায় ১ গিগাবাইট ডেটা ডাউনলোড হবে, যার মধ্যে উবুন্টু, সমস্ত সার্ভার, ডেটাবেজ, কনফিগারেশন ফাইল থাকবে।

এবার আপনি আপনার রুট ডিরেক্টরিতে যান, এবং নিচের গিট কমান্ডটির মাধ্যমে হোমস্টিডের গিট রিপোজিটরিটি ক্লোন করুন। আপনার মেশিনে যদি গিট ইনস্টল করা না থাকে, এখনই করে নিন।

cd ~
git clone https://github.com/laravel/homestead.git Homestead

এরপর আপনি হোমস্টিড ডিরেক্টরিতে প্রবেশ করুন, নিচের কমান্ডটি দিন-

cd ~/Homestead
bash init.sh

এই কমান্ডটির ফলে আপনার রুট ডিরেক্টরিতে .homestead/Homestead.yaml নামে একটি ফাইল তৈরি হবে। এই ফাইলটি আপনার হোমস্টিডের কনফিগারেশন ফাইল। এটি দেখতে অনেকটা এরকম-

ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Code
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code/homestead/public

databases:
    - homestead

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

এই ফাইলের প্রথমেই আছে আইপি, মেমরি, সিপিইউ এবং প্রোভাইডার। আইপি হচ্ছে যে আইপি থেকে আপনি আপনার ভ্যাগরেন্ট বক্স এক্সেস করতে পারবেন, মেমরি হচ্ছে ভ্যাগরেন্ট বক্সে আপনি কি পরিমান মেমরি এলোকেট করতে চান, সিপিইউ হচ্ছে ভ্যাগরেন্ট বক্সের সিপিইউ কোরের সংখ্যা। এরপরের অথোরাইজ এবং কি হচ্ছে আপনার এসএসএইচ কি যার মাধ্যমে আপনি ভ্যাগরেন্ট বক্সে ঢুকতে পারবেন। আপনার যদি গিটহাবে কোন একাউন্ট থেকে থাকে তাহলে আপনি খুব সহজেই আপনার পিসিতে এসএসএইচ কি তৈরি করে নিতে পারেন। এটি সম্পর্কে বিস্তারিত জানতে এখানে দেখুন।

এরপরই আছে ফোল্ডার অপশন। এর প্রথমে আছে map কি, যা আপনার পিসির একটি ফোল্ডারকে নির্দেশ করবে, আর to কি আপনার ভ্যাগরেন্ট বক্সের একটি ফোল্ডারকে নির্দেশ করবে। এই দুইটি ফোল্ডার একটি অপরটির সাথে সিনক্রোনাইজেশনে থাকবে। যার ফলে আপনি আপনার লোকাল মেশিনে ফাইল চেঞ্জ করলে আপনার ভার্চুয়াল বক্সেও ফাইলটি চেঞ্জ হয়ে যাবে। আমরা এক্ষেত্রে ডিফল্ট সেটিংসই ব্যবহার করবো। এরপর আমাদের পিসির রুটে Code নামে একটি ফোল্ডার তৈরি করলেই চলবে।

এরপরই আছে sites অপশন, যেটা আপনার প্রজেক্টকে নির্দেশ করবে। এর ম্যাপ কি আপনার কাস্টম ডোমেইন, এবং টু কি আপনার প্রজেক্টের পাবলিক পাথ নির্দেশ করবে। বাই ডিফল্ট homestead.app নামে একটি ডোমেইন ম্যাপ করা থাকে। এরপর আছে ডেটাবেজেস কি, যেটিতে উল্লেখ করা প্রত্যেকটি কি-এর নামে একটি করে ডেটাবেজ তৈরি অটোমেটিক্যালি তৈরি হবে।

এর নিচে আছে ব্ল্যাকফায়ার এবং পোর্টস কি, যা ডিফল্টভাবে কমেন্ট আউট করা থাকবে। আপনি যদি ব্ল্যাকফায়ার প্রোফাইলার ব্যবহার করেন তাহলে সেটি আনকমেন্ট করবেন এবং যদি ডিফল্ট পোর্ট ওভাররাই করতে চান তাহলে পোর্টস কি আনকমেন্ট করবেন।

আমাদের ভ্যাগরেন্ট সেটআপের কাজ শেষ। এবার চলুন ভ্যাগরান্ট চালু করে দেখি। এর জন্য যে ফোল্ডারে আমরা হোমস্টিডের গিট রিপোজিটরি ক্লোন করেছি সেটিতে ঢুকতে হবে। তারপর নিচের কমান্ডটি দিতে হবে-

cd ~/Homestead
vagrant up

এই কমান্ডের মাধ্যমে আপনার ভ্যাগরেন্ট সার্ভার চালু হবে। এবার ভ্যাগরেন্ট মেশিনে লগ-ইন করতে নিচের কমান্ডটি লিখুন-

vagrant ssh

এবার আপনি আপনার ভ্যাগরেন্ট মেশিনে আপনার অ্যাপ্লিকেশন ডেভেলপমেন্ট চালিয়ে যেতে পারবেন।

চলুন, প্রথমেই আমরা নিচের কমান্ডটির মাধ্যমে লারাভেল ইনস্টল দিই-

composer create-project laravel/laravel homestead --prefer-dist

এবার আপনার এই টার্মিনাল চালু থাকা অবস্থায় আরেকটি টার্মিনাল উইন্ডোতে আপনার হোস্ট ফাইলটি ওপেন করুন। লিনাক্স বা ম্যাক অপারেটিং সিস্টেমে এটি থাকে /etc/hosts নামক ফাইলে। সেটিতে নিচের লাইনটি যুক্ত করুন-

192.168.10.10	homestead.app

এবার আপনার ব্রাউজারে homestead.app ইউআরএলে ঢুকলে আপনি লারাভেলের ডিফল্ট ওয়েলকাম পেজটি দেখতে পাবেন।

যদি কখনো আপনার আরো কোন প্রজেক্ট যুক্ত করার প্রয়োজন পড়ে, তাহলে আপনি .homestead/Homestead.yaml ফাইলে এডিট করে সাইটস সেকশনে আরেকটি কি-ভ্যালু পেয়ার যুক্ত করুন এবং আপনার হোস্ট ফাইলে ম্যাপিং ইউআরএলটি একই আইপিতে ম্যাপ করুন। এবার আপনার ক্লোন করা হোমস্টিড ফোল্ডারে ঢুকে নিচের কমান্ডটি দিন-

vagrant provision

আশা করি আপনার হোমস্টিড সেটআপ করতে কোন সমস্যা হবে না। যদি এরপরও কোন সমস্যায় পড়েন তাহলে লারাভেলের ডকুমেন্টেশনে দেখতে পারেন অথবা নিচের কমেন্টে আমাকে জানাতে পারেন।

লারাভেল ৫.১ এ কাস্টম পেজিনেশন


লারাভেলের ইলোকোয়েন্ট বা কোয়েরি বিল্ডার ব্যবহার করে আপনি খুব সহজেই পেজিনেশন তৈরি করতে পারেন। নিচে উদাহরন দেখুন-

public function show()
{
    $people = People::paginate(5);
    return view('poeple.list', compact('people'));
}

আর পেজিনেশন লিঙ্কগুলো ভিউ পেজে শো করতে হয় এভাবে-

{!! $people->render() !!}

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

public function index()
{
    $people = collect([
        [
            'name'    => 'Milon',
            'website' => 'http://milon.im'
        ],
        [
            'name'    => 'Sadek',
            'website' => 'http://sadek.im'
        ],
        //many other items...
        [
            'name'    => 'Ashik',
            'website' => 'http://ashik.im'
        ]
    ]);

    $perPage     = 5;
    $currentPage = \Input::get('page') ?: 1;
    $pagedData   = $people->slice($currentPage * $perPage, $perPage)->all();
    $people  = new Illuminate\Pagination\LengthAwarePaginator($pagedData, count($people), $perPage, $currentPage);

    return view('people.list', compact('people'));
}

এখানে প্রথমে একটা বড় এ্যারে কে ‌‌collect() হেল্পার মেথডের সাহায্যে লারাভেলের কালেকশন ক্লাসের অবজেক্টে পরিনত করা হয়েছে। এরপর $perPage এ ঠিক করা হয়েছে প্রতি পেজে কয়টা ডেটা শো করবে। এরপর কারেন্ট পেজ কোনটা সেটা নির্ধারন করা হয়েছে ইউআরএলের GET প্যারামিটার থেকে। যদি কোন গেট প্যারামিটার না থাকে তবে আমরা ডিফল্টভাবে $currentPage = 1 ধরে নেই।

এরপর ডেটাকে স্লাইস করে নিতে হয়। এই স্লাইস মেথড কিভাবে কাজ করে সেটা লারাভেলের কালেকশনের ডকুমেন্টেশন দেখে নিতে পারেন। পরবর্তীতে এই ডেটাকে LengthAwarePaginator ক্লাসের ইন্সট্যান্স বানাতে হয়। LengthAwarePaginator ব্যবহার না করে আপনি চাইলে Paginator ক্লাসও ব্যবহার করতে পারেন। এ দুটির মধ্যে পার্থক্য হচ্ছে LengthAwarePaginator ক্লাসটিতে আপনার কালেকশনে মোট কয়টি ডেটা আছে সেটা পাঠাতে হয় কিন্তু Paginator এ সেটা পাঠাতে হয় না।

বাকি ভিউ আপনি নিচের মত করে রেন্ডার করতে পারেন-

<div class="container">
    <table class="table table-bordered">
        <tr>
            <th>Name</th>
            <th>Website</th>
        </tr>

        @foreach($collection as $data)
            <tr>
                <td>{{ $data['name'] }}</td>
                <td>{{ $data['website'] }}</td>
            </tr>
        @endforeach
    </table>
        
    {!! $collection->render() !!}
</div>

হ্যাপি কোডিং…