লারাভেল বইয়ের প্রিন্টিং মিসটেক প্রসঙ্গে


আমার প্রকাশিত প্রথম বই লারাভেল পিএইচপি ওয়েব ফ্রেমওয়ার্ক-এ অনিচ্ছাসত্ত্বেও একটা প্রিন্টিং মিসটেক হয়ে গেছে। বইয়ের প্রথম অধ্যায়ের “কনস্ট্রাক্টর ইনজেকশন” অংশের(পৃষ্ঠা নাম্বার ১৭) কোডে কয়েকটি লাইন বাদ পড়ে গেছে। পাঠকের যাতে বুঝতে অসুবিধা না হয় সেজন্য সেই অংশটি আমি এখানে দিয়ে দিচ্ছি।

use Book;
use BookShelf;
    
class Library{
        
    $protected $book;
    $protected $bookShelf;

    public function __construct(Book $book, BookShelf $bookShelf){
        $this->book = $book;
        $this->bookShelf = $bookShelf;
    }
}

এ অনাকাঙ্খিত ভুলের জন্য আমি পাঠকের নিকট ক্ষমাপ্রার্থী। পরবর্তী সংস্করণে এ ভুল শুধরে দেয়া হবে।

Laravel 5.1 Database Factory


Earlier versions of laravel comes with a system for seeding dummy data on database. Traditionaly you just create a class extending laravel’s DatabaseSeeder class. This would look like this-

<?php

use DB;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class UserTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => str_random(10);
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

Then you can run this command for seed in database-

php artisan db:seed

Instead of using creating query builder, you could also called eloquent. In that case, run method will look like this-

public function run(){
    \App\User::create([
        'name' => str_random(10);
        'email' => str_random(10).'@gmail.com',
        'password' => bcrypt('secret'),
    ]);
}

You could also use a package called faker with it. Faker will generate bunch of different things automatically for you like- name, email, phone number, paragraph, sentence, date and much more. In that case UserTableSeeder class will look like this-

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use Faker\Factory as Faker;

class UserTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Faker::create();

        DB::table('users')->insert([
            'name' => $faker->name;
            'email' => $faker->email,
            'password' => bcrypt('secret'),
        ]);
    }
}

For more entry you could use loop and each time faker would create different entry for you.

But using laravel’s new feature model factory, this could be much more simpler. Take a look-

class UserTableSeeder extends Seeder
{
    public function run()
    {
        factory('App\User', 50)->create();
    }
}

Couldn’t be much simpler than that, right? You could also use make method that will create users, but won’t persist them in database. This method is very helpful for testing. Let talk them another day, as it is out of scope of today’s topic.

Now you could wonder, how laravel knows that we should create 50 users, and how it also know the database schema and what to seed? I think if you already noticed that laravel 5.1 comes with a new folder called factory in database folder and by default there is a file called ModelFactory. Let’s look at this file-

$factory->define('App\User', function ($faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => str_random(10),
        'remember_token' => str_random(10),
    ];
});

Here we see, laravel creates a factory defination for App\User model and it passes a faker object, that we use earlier. We could also create other defination and also create another file in this directory. But if you create new file, you should run this command-

composer dump-autoload

This needed to be done because in version 5.1 laravel autoload database folder with classmap. You could take a look composer.json file.

Happy coding…

bower এর ব্যবহার


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

বাওয়ার টুইটারের তৈরি করা ক্লায়েন্ট সাইট ডিপেন্ডেন্সি ম্যানেজমেন্ট টুল। এটি আসলে একটি নোড প্যাকেজ। সুতরাং বাওয়ার ব্যবহার করতে হলে আপনার পিসিতে অবশ্যই নোডজেএস ইনস্টল থাকা লাগবে। নোড ইনস্টল করলে এর সাথে সাথে এর প্যাকেজ ম্যানেজার npm(নোড প্যাকেজ ম্যানেজার)ও ইনস্টল হয়। বাওয়ার ইনস্টল করার জন্য আপনাকে নিচের কমান্ডটি টার্মিনালে লিখতে হবে-

npm install -g bower

ইনস্টল হয়ে গেলে এটি চেক করার জন্য টার্মিনালে লিখুন-

bower -v

এবার আপনি বাওয়ার ব্যবহার করতে পারবেন, ঠিক যেভাবে npm বা composer ব্যবহার করেন। ধরুন আপনি জেকুয়েরি ইনস্টল করতে চান। যেমন-

bower install jquery

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

bower install bootstrap

এখন বুটস্ট্র্যাপ যেহেতু জেকুয়েরির উপর নির্ভরশীল, তাই বুটস্ট্র্যাপ ইনস্টল করলে এর যত ডিপেন্ডেন্সি আছে সেগুলিও ইনস্টল হয়ে যাবে।

এখন ধরুন আপনি যে প্যাকেজগুলি ইনস্টল করেছেন, সেগুলির লিস্ট একটা ফাইলে সেভ করে রাখতে চান। এটা আপনি করতে পারবেন bower.json নামের ফাইলে। এই ফাইলটি তৈরি করতে লিখুন-

bower init

এখন আপনি যে প্যাকেজটি ইনস্টল করেছেন, সেটি যদি বাওয়ার ফাইলো সেভ করে রাখতে চান, তাহলে লিখুন-

bower install jquery --save

এই –save এর মাধ্যমে আপনি ডিপেন্ডেন্সি হিসেবে যোগ করতে পারবেন। আপনি চাইলে ডেভেলপার ডিপেন্ডেন্সিতেও যুক্ত করতে পারবেন এভাবে-

bower install jquery --save-dev

বাই ডিফল্ট বাওয়ার তার সমস্ত প্যাকেজ ইনস্টল করে bower_components নামে ফোল্ডারে। আপনি চাইলে এটি পরিবর্তন করতে পারবেন .bowerrc ফাইলের মাধ্যমে। এটি একটি জেসন ফাইল, এটি দেখতে হবে অনেকটা এরকম-

{
  "directory": "app/components/",
  "analytics": false,
  "timeout": 120000,
  "registry": {
    "search": [
      "http://localhost:8000",
      "https://bower.herokuapp.com"
    ]
  }
}

বাওয়ার এপিআই সম্পর্কে বিস্তারিত জানার জন্য আপনি http://bower.io সাইটটি ভিজিট করতে পারবেন।