دسته بندی :
تاریخ انتشار : ۰۳ خرداد ۱۳۹۴
گردآوری و تالیف : حسام موسوی

کارمو با طراحی گرافیکی شروع کردم و حدود 2 سال طراحی گرافیکی میکردم بعد به طراحی وب علاقه پیدا کردم و همراه طراحی وب عاشق کدنویسی شدم به PHP | sass | css | Jquery | javaScript تسلط کامل دارم . در بین فریم ورک های PHP اول با CodeIgniter کار کردم اما به laravel علاقه مند شدم و دارم بطور حرفه ای دنبالش میکنم . امید من اینکه بتونم کاربرهای ایرانی رو به دنیای بیرون متصل کنم تا بتونن از فناوری های تازه آگاهی داشته باشن

موضوعاتی که تا الان گفته شد :

  • نصب لاراول 
  • Migration ها
  • ساخت مدل ها با استفاده از Eloquent ORM
  • Database Seeding
  • Controllers

امروز در این قسمت از آموزش ساخت وبلاگ با لاراول 5 من قصد دارم در مورد Routing ها و نحوه کار باهاشون با شما صحبت کنم و بهتون یاد بدم که چطوری با Route ها کار کنید . خب بریم سراغ آموزش .  

  • Routing در لاراول 

مسیریابی ، نقش اساسی در عملکرد هسته هر فریم ورک MVC ایفا میکنه . در حقیقت Route یه نگاشت بین موتور requests و response اگه بخوایم خیلی ساده تعریفش کنیم آدرس های URL ی که شما در مرورگرتون وارد میکنید با route مدیریت میشه و نقاط ورودی برنامه اتونو تعریف میکنه . داشتن یه routing انعطاف پذیر می تونه به شما کمک کنه تا کنترل بهتر و کاربردی تر رو برنامه اتون داشته باشین .

لاراول دارای یک مسیریابی قدرتمنده ، که بر اساس مسیریابی Symfony نوشته شده که کار باهاش خیلی خیلی راحته همینطور رابط کاربری راحت و قابلیت های زیادی داره که برنامه نویسی با اونو براتون لذت بخش تر میکنه . 

  • تعریف Route ها 

در لاراول Route های برنامه ما در مسیر app\http\routes.php تعریف میشن . یک مثال ساده از فایل routes.php :

<?php
 
// will be used to handle GET requests.
Route::get('index',function()
{
    echo 'this is index page';
});
 
Route::get('login',function()
{
    echo 'GET login requests will be hndled here.';
});
 
// will be used to handle POST requests.
Route::post('login', function() 
{
    echo 'POST login requests will be handled here.';
});

ما همچنین میتونیم از متد کنترل ها استفاده کنیم مثل زیر :

<?php
Route::get('users', 'UsersController@getIndex');

در کد بالا زمانی که ما درخواستی بصورت /users داشته باشیم این درخواست بوسیله route به متد getIndex از کنترل UserController متصل میشه و داده ها رو به نسبت کدی که در getIndex قرار داره به کاربر نشون میده ما همچنین میتونیم داده ها رو بطور مستقیم بوسیله افعال خود http حذف یا اضافه کنیم با استفاده از Route::put و Route::delete

پارامتر ها در Route 

<?php
 
// parameter {id} will be passed to the closure.
Route::any('post/{id}',function($id)
{
    echo "post with id: $id";
});

 
// A model with given post id will be passed to closure for any HTTP request.
Route::any('post/{post}',function($post)
{
    echo "post with id: $post->id";
});

نکته :  filter که در نسخه 4 لاراول در route ها مورد استفاده قرار میگرفت در نسخه 5 جایی خودشو به Middleware داده که تو آموزش های بعد بطور کامل اونو توضیح میدم .

ما می تونیم در هر route با تعریف کلید در آرایه ای که در زیر میبینید یک نام روتر دوم داشته باشیم . 

<?php
 
Route::get('admin',['as'=>'admin.home','middleware' => 'auth',function()
{
    return 'is already called';
}]);
 
//another example using controller action.
Route::get('/post/list',['as' => 'post.list','uses' => 'PostController@listPost']);

در view ها هم ما میتویم با استفاده از route() مسیرهای موجود رو به لینک قابل کلیک تبدیل کنیم بصورت زیر 

<?php
route('post.list');

شما میتویند برای توضیحات کامل تر در مورد route ها به اسناد خود لاراول مراجعه کنید یا منتظر بمونید تا ما بطور کامل در پست های دیگه route ها رو توضیح بدیم . البته شما میتونید از فیلم ویدئویی که در این مورد در سایت وجود داره هم استفاده کنید . 

  • ساخت Route های مورد نیاز برای وبلاگ

در زیر مسیر ههای که برای برنامه اومون استفاده میکنیم رو میتونید ببینید :

<?php
//file: app/http/routes.php
 Route::controllers([
	'auth' => 'Auth\AuthController',
	'password' => 'Auth\PasswordController',
]);

/* User routes */
get('/post/{post}/show', ['as' => 'post.show', 'uses' => 'PostController@showPost']);
post('/post/{post}/comment', ['as' => 'comment.new', 'uses' => 'CommentController@newComment']);

/* Admin routes */
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function () {
    /*get routes*/
    get('dash-board', function () {
        $username = Auth::user()->name;
        return view('dash')->with('content', "Hi $username, Welcome to Dashboard!")
            ->withUsername('username',$username)
            ->withTitle('title','DashBoard');
    });
    get('/post/list', ['as' => 'post.list', 'uses' => 'PostController@listPost']);
    get('/post/new', ['as' => 'post.new', 'uses' => 'PostController@newPost']);
    get('/post/{post}/edit', ['as' => 'post.edit', 'uses' => 'PostController@editPost']);
    get('/post/{post}/delete', ['as' => 'post.delete', 'uses' => 'PostController@deletePost']);
    get('/comment/list', ['as' => 'comment.list', 'uses' => 'CommentController@listComment']);
    get('/comment/{comment}/show', ['as' => 'comment.show', 'uses' => 'CommentController@showComment']);
    get('/comment/{comment}/delete', ['as' => 'comment.delete', 'uses' => 'CommentController@deleteComment']);

    /*post routes*/
    post('/post/save', ['as' => 'post.save', 'uses' => 'PostController@savePost']);
    post('/post/{post}/update', ['as' => 'post.update', 'uses' => 'PostController@updatePost']);
    post('/comment/{comment}/update', ['as' => 'comment.update', 'uses' => 'CommentController@updateComment']);

});

/* Home routes */
Route::controller('/', 'BlogController');

/* View Composer */
View::composer('sidebar', function ($view) {
    $view->recentPosts = App\post::orderBy('id', 'desc')->take(5)->get();
});

 در کد بالا برای اعتبار سنجی مدیریت ما از کنترل auth استفاده میکنیم و همینطور در route های بعدی یعنی post.show و comment.new ما به مخاطب ها اجازه میدیم تا پست ها رو در صفحات تکی (single page) ببینن و اگه خواستن نظر خودشون در مورد اون پست رو ارسال کنن . در route بعد ما یه route:group میسازیم که تمام مسیر های مربوط به مدیریت در اون قرار میگیره و یک پیشوند admin هم برای route های که در این گروه قرار دارن تعریف میکنیم .تا هر route که درخواست شد قبلش admin بیاد برای مثال زمانی که مسیر post.edit فراخوانی بشه به url به این صورت بازگردانی میشه (http://localhost/admin/post/12/edit) 

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

نظرات ، پیشنهادات ، انتقادات خودتونو لطفا در بخش نظرات به ما بگین . با تشکر 

 

برچسب : , ,

دیدگاه های مخاطبین

ثبت دیدگاه شما
  • علی

    ممنون از آموزش های خوبتون
    میشه لطف کنید سیستم رای دادن به پست ها رو هم آموزش بدید

    با تشکر

    • admin

      سلام چشم حتما اینکارو میکنیم

  • mohammad

    سلام دوست من ، وقت بخیر :)

    ممنون بابت آموزش های مفیدتون .

    یه سوالی برام بوجود اومده در زمینه لاراول و کوئری گرفتن.

    چطور میشه شرط هارو اولویت بندی کرد در ORM ?
    مثلا من یه همچین کوئری دارم :
    SELECT * FROM `ebook` WHERE `type_id` = '2' AND ( `adsExpDate` < '1394/04/18' OR `isFree` = 0 )

    در شرط بالا مشخص کردم که رکورد هایی که از تاریخ ذکر شده کوچیکتر بود یا فیلد isFree اون برابر 1 بود رو نمایش بده که تا اینجا و با همین شکل درست کار میکنه .
    اگه پرانتز رو برداریم ، نتیجه کلا اشتباه میشه ( بخاطر OR ) !

    حالا چطور میشه این پرانتز گذاری هارو ( اولویت ها ) درون لاراول انجام بدم ؟

    • admin

      سلام به اینصورت
      $post = App\posts::where('type_id', '=','2')->where(function($query){
      $query->where('adsExpDate', '<' , '1394/04/18')->Orwhere('isFree', '=' , '0');
      })->get()
      اگه دقیق تر هم بخواین تو خود اسناد لاراول هم هست
      http://laravel.com/docs/master/queries#advanced-where-clauses

پیشنهاد میکنیم این مطالب رو هم مطالعه کنید :