آموزش ساخت یک وبلاگ ساده با لاراول 5 [قسمت اول]
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 6 دقیقه

آموزش ساخت یک وبلاگ ساده با لاراول 5 [قسمت اول]

با توجه به این که تعداد آموزش های فارسی لاراول در ایران خیلی کمه و تو دنیا لاراول مورد توجه خیلی از توسعه دهنده ها قرار گرفته ، به این صورت که لاراول در سال 2014 فریم ورک سال معرفی شده و کاربران زیاد سعی در یادگیری و استفاده از این فریم ورک php دارن . ما با خودمون فکر کردیم که یه آموزش برای ساخت یه وبلاگ ساده با استفاده از لاراول براتون آماده کنیم البته اگه چیزی در مورد لاراول نمیدونید تو پست های آینده در مورد این فریم ورک عالی صحبت میکنیم و اونو بطور کامل بهتون معرفی خواهیم کرد . با ما باشید . 

خب در این مقاله ما قصد داریم یه وبلاگ ساده با استفاده از laravel 5 ایجاد کنیم . وبلاگی که خواهان ایجاد اون هستیم دارای ویژگی های زیر می باشد : 

  • نمایش پست با لینک ادامه مطلب در صفحه اصلی.
  • قابلیت سرچ در پست های وبسایت توسط کاربر . 
  • نمایش یک پست کامل به همراه بخش نظرات .
  • مدیر توانایی درج ، حذف ، آپدیت و ویرایش پست ها و نظرات رو داشته باشه . 
  • مدیر توانایی جواب دادن نظرات در پنل مدیریت رو داره باشه .   

قدم اول : نصب و راه اندازی سریع laravel 5 

ما فرض رو بر این میزاریم که شما کاملا با نصب و راه اندازی laravel 5 آشنایی دارید و مشغول به کار با اونید اگه اینطوره نیاز به بخش زیر ندارید . در غیر این صورت میتونید بخش زیر رو دنبال کنید .

  • دستورالعمل نصب laravel 5 رو میتونید در این صفحه پیدا کنید : اینجا 
  • ساخت یه دیتابیس با استفاده از تریمنال mysql 
┌─[usm4n@usm4n-desktop]―[~]
└─•mysql -u root -p
Enter password: 
mysql> create database laravel;
Query OK, 1 row affected (0.00 sec)

 پیکربندی پایگاه داده اتون در بخش /config/database.php :

'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'laravel',
    'username'  => 'root',
    'password'  => 'very_secret_password',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

ایجاد جداول مختلف با استفاده از Migrations : 

در این بخش ، ما جدول های پایگاه داده مورد استفاده در وبلاگمونو با استفاده از Migrations ایجاد میکنم . برنامه ما از جدول Posts و comments برای ارسال پست روی وبلاگ و بخش نظرات استفاده میکنه . (البته اگه اطلاع زیادی در مورد Migrations ندارید میتونید از این پست استفاده کنید تا باهاش آشنا بشین )

نکته سریع : ما از دستورات artisan migrate:make create_tablename_table و artisan migrate به ترتیب برای ایجاد Migrations و اجرایی اون Migrations  استفاده میکنیم . 

کلاس Migrations برای جدول Posts : 

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreatePostsTable extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('read_more');
            $table->text('content');
            $table->unsignedInteger('comment_count');
            $table->timestamps();
            $table->engine = 'MyISAM';
        });
        DB::statement('ALTER TABLE posts ADD FULLTEXT search(title, content)');
    }


    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->dropIndex('search');
            $table->drop();
        });
    }

}

این کلاس در بخش /database/Migrations/ قرار میگیره . 

توجه داشته باشید که من با استفاده کردن از  $table->engine = 'MyISAM' و با اضافه کردن شاخص مرکب به ستون های title, content این قابلیتو ایجاد کردم که کاربر وقتی سرچ میکنه مطلب مورد نظرش هم تو متن و هم تو عنوان پست جستجو بشه . 

کلاس Migrations برای جدول comments

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreateCommentsTable extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('post_id');
            $table->string('commenter');
            $table->string('email');
            $table->text('comment');
            $table->boolean('approved');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('comments');
    }

}

ما با ایجاد فیلد post_id این قابلتو برای خودمون ایجاد میکنیم که بتونیم بین دوتا جدول ارتباط ایجاد کنیم و با استفاده از Eloquent ORM به هدفه خودمون برسیم . و همینطور از فیلد approved برای تایید نظرات کاربرا توسط مدیر استفاده میکنیم که آیا نظر قابل مشاهده تو سایت هست یا خیر . البته یه جدول دیگه هم با اسم users و با استفاده از Migrations باید بسازین برای احراز هویت مدیر یا کاربراتون . که این جدول از قبل وقتی که پروژه laravel 5 رو نصب و راه اندازی کردین تو پروژه اتون قرار داده شده .

ایجاد Models با استفاده از Eloquent ORM : 

Eloquent ORM همراه با خود فریم ورک لاراول وجود داره و میتونه به سادگی و خیلی زیبا با استفاده از ActiveRecord با جداول پایگاه دادتون کار کنه و عملیات های مورد نظرتونو به بهترین وجه انجام بده . هر جدول که در پایگاه دادتون وجود داره دارای یه Model جدا در پروژتون می باشد که این باعث تعامل بهتر با جداول میشه . 

ما از اسم های ساده تری برای جدول ها بعنوان نام Eloqent Model استفاده میکنم . تا خوانایی کد ها بالا بره. این قرار داد کمک میکنه تا Eloquent بتونه به صورت جدول با  Model ارتباط برقرار کنه . برای مثال اگه اسم  Eloqent Model ما Post باشه ما از اسم جدول posts استفاده میکنیم . 

در زیر کد های بخش Post و Comment رو قرار میدیم : 

<?php
// file: app/Post.php
class Post extends Model {
 
    public function comments()
    {
        return $this->hasMany('Comment');
    }
 
}
// file: app/Comment.php
class Comment extends Model {
 
    public function post()
    {
        return $this->belongsTo('Post');
    }
}

نکته : کد های که تو کلاس این دو مدل استفاده شدن رو بعدا بهتون توضیح میدم که چیه فقط فعلا بدونین که اینا رو هم باید وارد کنید . 

وارد کردن اطلاعات به جداول دیتابیس با استفاده از Seeding : 

ما از یه کلاس به اسم PostCommentSeeder برای پر کردن جدول های posts و comments استفاده میکنیم . 

نکته سریع : برای اجرای Seed از کد php artisan db:seed در ترمینالمون استفاده کنید و اگه بازم اطلاعاتی در مورد Seeding ندارید تو پست های آینده بطور کامل توضیح میدیم که چیه و چیکار میکنه . 

کد PostCommentSeeder : 

 <?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\post;
use App\Comment; 

class PostCommentSeeder extends Seeder {
 
    public function run()
    {
        $content = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                    Praesent vel ligula scelerisque, vehicula dui eu, fermentum velit. 
                    Phasellus ac ornare eros, quis malesuada augue. Nunc ac nibh at mauris dapibus fermentum. 
                    In in aliquet nisi, ut scelerisque arcu. Integer tempor, nunc ac lacinia cursus, 
                    mauris justo volutpat elit, 
                    eget accumsan nulla nisi ut nisi. Etiam non convallis ligula. Nulla urna augue, 
                    dignissim ac semper in, ornare ac mauris. Duis nec felis mauris.';
        for( $i = 1 ; $i <= 20 ; $i++ )
        {
            $post = new Post;
            $post->title = "Post no $i";
            $post->read_more = substr($content, 0, 120);
            $post->content = $content;
            $post->save();
 
            $maxComments = mt_rand(3,15);
            for( $j = 1 ; $j <= $maxComments; $j++)
            {
                $comment = new Comment;
                $comment->commenter = 'xyz';
                $comment->comment = substr($content, 0, 120);
                $comment->email = 'xyz@xmail.com';
                $comment->approved = 1;
                $post->comments()->save($comment);
                $post->increment('comment_count');
            }   
        }
    }
}

for اول برای بوجود آوردن پست های مختلف بدونه نیاز به تنظیمات خاصیه . و حلفه داخلی هم مربوط به ایجاد کامنت برای اون پست در حال ساخت میشه . که کامنت های مختلفی رو برای پستها قرار میده . همچنین در حلقه داخلی بعد از به وجود امدن کامنت فیلد comment_count مربوط به پست اون کامنت رو یه واحد افزایش میده . 

استفاده از فرمان "artisan tinker" در ترمینال 

laravel با استفاده از این دستور یه ارتباط تعاملی آسان رو از طریق خط فرمان ترمینال با پروژه ایجاد میکنه که شما میتونید دستورات مختلف و جالبی رو تو خط فرمانتون استفاده کنید که اجازه بدید چند تا از این دستورات رو براتون مثال بزنم : 

┌─[usm4n@usm4n-desktop]―[~]
└─•artisan tinker
>

پیدا کردن یه آیدی با استفاده از find()

>$post = Post::find(2);
>$post->setHidden(['content','read_more','updated_at']);
>echo $post;
{"id":"2","title":"Post no 2","comment_count":"7","created_at":"2014-01-06 09:43:44"}

محدود کردن بازیابی رکورد ها با استفاده از take() و skip()  

>$post = Post::skip(5)->take(2)->get();
>foreach($post as $value) echo "post id:$value->id ";
post id:6 post id:7

استفاده از select() و first()

>$post = Post::select('id','title')->first();
>echo $post;
{"id":"1","title":"Post no 1"}

استفاده از where() با select()

>$post = Post::select('id','title')->where('id','=',10)->first();
>echo $post;
{"id":"10","title":"Post no 10"}

گرفتن خصوصیات یه فیلد کامنت از یه پست 

>$post = Post::find(4);
>echo $post->comments[0]->commenter;
xyz

خوب از شما ممنونم که تا اینجای این آموزش با ما بودید اگه نظر یا پیشنهاد برای بهتر شدن این سری آموزش دارید حتما با ما تو بخش نظرات در میون بزارید . 

امیدوارم مورد قبول شما قرار گرفته باشه انشالله هر چه زودتر بخش دوم رو هم قرار میدیم . 

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
5 از 3 رای

/@hesammousavi
حسام موسوی
طراح و برنامه نویس

بیشتر از ۱۵ سال هست که در حال برنامه‌نویسی و انجام پروژه های مختلف هستم و ۱۰ سالی هست که آموزش برنامه‌نویسی به علاقمندان حوزه برنامه نویسی میدیم در همه این مدت الان عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید