عنوان مقاله :

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

گردآوری و تالیف : حسام موسوی
تاریخ انتشار : 13 اردیبهشت 1394
دسته بندی ها : لاراول , آموزشی

با توجه به این که تعداد آموزش های فارسی لاراول در ایران خیلی کمه و تو دنیا لاراول مورد توجه خیلی از توسعه دهنده ها قرار گرفته ، به این صورت که لاراول در سال 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

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

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

برچسب : ,

مقالات پیشنهادی

چطور لاراول از وبسایت شما محافظت می کند؟

لاراول کمک میکنه تا امنیت وبسایت شما تامین بشه. در این مقاله می خواهیم نحوه برخورد لاراول با سه ریسک امنیتی مهم : نفوذ sql, جعل درخواست cross-site و ا...

مقدمه‌ای بر تست پروژه لاراولی بوسیله Laravel Dusk

یکی از بزرگترین مشکلاتی که در PHPUnit وجود داشت این بود که تست نرم‌افزارهای برپایه JavaScript غیرممکن بود. با Dusk میتونید براحتی ویژگی‌های Client-sid...

فیلتر کردن نتایج query ها با شروط مختلف

شاید عنوان این مطلب برای شما کمی گیج کننده باشه ، اما بزارید براتون با یک مثال سادش کنم شما دارای لیستی از مشتری هستید و اونا رو با دستور Customer::al...

Laravel-Excel - تبدیل کردن ساده اطلاعات مدل به اکسل

امروز من می خوام به طور خلاصه بررسی اجمالی در مورد پکیج Laravel-Excel داشته باشم . به نظرم احتیاج به این نیست که در مورد این مطلب توضیح خاصی بدم چون ش...

دیدگاه های ارزشمند شما

sajad | 1 سال پیش

سلام ممنون بابت آموزش اما تمام لینک های صفحه مشکل دارن از جمله توضیح در مورد : Migrations

admin | 1 سال پیش

سلام چه مشکلی

sati | 1 سال پیش

سلام
من یه سوال داشتم :
قسمت اول اموزش کدها رو به صورت موازی پیش اومدم
اما توی براوزر نمیدونم چه ادرسی رو وارد کنم که همان ایمیجی که شما روی سایت گذاشتین روی براوزر به نمایش در بیاد . ممنون میشم اگه راهنماییم کنین

admin | 1 سال پیش

فایل های استایل رو باید داشته باشین که به این صورت در بیاد
این اموزش متنیه فایل های استایل در دسترس نیستن

نیما تهرانی | 2 سال پیش

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

یعنی قسمتی مشترک در تمام صفحات حالا میخواد منو باشه یا یک متغیر

با تشکر

admin | 2 سال پیش

تو دوره ها در این باره صحبت کردم برای این کار میتونید از view composer یا view share استفاده کنید .
https://laravel.com/docs/5.2/views#view-composers
و
https://laravel.com/docs/5.2/views#sharing-data-with-all-views

علی | 2 سال پیش

سلام
برای ایجاد migration هائی که بالا توضیح دادید چه کار کنم ؟
کد ها رو کپی کنم و یا از دستور php artisan make:migration استفاده کنم و سپس کدهای خودم را بر اساس کدهای شما ویرایش کنم ؟

با تشکر ازشما

admin | 2 سال پیش

میتونید با دستور make:migrtion اول migration خودتون رو بسازید و بعد دستورات رو قرار بدین

سید محمد | 2 سال پیش

سلام
صفحات ویو برای این آموزش موجود نیست؟
همچنین شما آیا از بوت استرب برای استایل های قالب این آموزش استفاده کردید؟

admin | 2 سال پیش

موجود هست ولی فرصت نکردیم پست مربوط به ویو ها رو بزاریم انشالله در یک پست دیگه
خیر از Foundation برای استایل دهی استفاده شده

amirhp | 2 سال پیش

سلام. کدهایی که قرار داده‌اید ناقصه، یعنی با کپی کردن همین‌ها اجرا نمیشه. مثل کدهای جداول. میشه لطفا این قسمت رو درست کنید؟

admin | 2 سال پیش

ممنون از اطلاع رسانیتون مشکل رفع شد .

سعیده | 2 سال پیش

با سلام و تشکر از شما من توی نصب composer مشکل دارم . تو مرحله آخر وقتی install رو می زنم این ارور رو می ده Some settings on your machine make Composer unable to work properly. Make sure that you fix the issues listed below and run this script again: The openssl extension is missing, which means that secure HTTPS transfers are impossible. If possible you should enable it or recompile php with --with-openssl

admin | 2 سال پیش

سلام . شما extension=php_openssl.dll فعال نیست برای فعلا کردنش لطفا به بخش php.ini برین و اگه این مقدارو پیدا کنید تو اون فایل و اگه سمیکالون رو به روش قرار داشت اون سمیکالون رو بردارید تا فعال بشه . فکر کنم با این کار مشکل حل بشه

محمدرضا | 2 سال پیش

باسلام لطفا این خط رو بیشتر توضیح بدید: DB::statement('ALTER TABLE posts ADD FULLTEXT search(title, content)'); به جدول پست یک فیلد اضافه میکنه از نوع fulltext؟؟ آخه syntax alter که اینجوری نیست!

admin | 2 سال پیش

سلام . ببینید این کد به جدول ستونی اضافه نمیکنه یک شاخص اضافه میکنه به اسم search که بعد بتونین برای جستجو در عنوان و متن پستتون ازش استفاده کنید

داوود | 2 سال پیش

سلام، ممنونم ازت. بسیار عالی بود.

soheyla | 2 سال پیش

خیلی ممنون خیلی خوبه که این کارو میکنین در down migrate برای posts table کد (table->dropIndex('search$ چه کاری میکنه

admin | 2 سال پیش

dropIndex برای حذف شاخص از جدولمونه !

علی محمدی | 2 سال پیش

خیلی ممنون به خاطر وقتی که گذاشتین و این آموزش رو تهیه کردین. منتظر بقیه آموزش هستیم.

admin | 2 سال پیش

ممنون از همراهیتون حتما تا چند روز آینده ادامه این سری رو قرار میدیم .

یوسف | 2 سال پیش

خیلی خوب کاری کردی لاراول رو یاد دادی.جاش خالی بود ادامه بده اموزش رو