32
تشکر

Laravel: مسیریابی یا Routing

Laravel 4

Laravel 4

اولین قسمتی که برای کار با Laravel باید یاد داشته باشیم، بخش مسیریابی یا Routing است. در‌واقع توسط این بخش ما مشخص میکنیم، که برای مثال اگر کاربر یک آدرس مشخصی از سایت را وارد کرد، چه صفحه‌ای به کاربر نمایش دهیم.

در ادامه مطلب همراه ما باشید

ساختار Laravel

ساختاری که توضیح داده میشود، مربوط به Laravel 4 است، که ممکن است در آینده تغییر داشته باشد. پوشه public محل قرار دادن فایل‌های استاتیک و همچنین استایل ها و فایل‌های جاوا اسکریپت است. پوشه views که در داخل پوشه app قرار دارد، محل قرار دادن فایل‌های صفحات داینامیک است.

همچنین کدهای مربوط به Routing در فایل routes.php در پوشه app قرار دارد.

کار با routes

اولین کاری که باید انجام دهیم، تغییر صفحه اصلی می‌باشد. برای اینکار ابتدا یک فایل به نام home.blade.php در پوشه views می سازیم. Laravel از موتور تپلمیت Blade استفاده میکند. که در قسمت بعدی نحوه کار با آن را شرح میدهیم.

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

<!DOCTYPE html>
<html>
<head>
  <title>My site</title>
  <meta charset="utf8">
  <link rel="stylesheet" type="text/css" href="style/main.css">
</head>
<body>
  <h1>سایت من</h1>
  <a href="/register">ثبت نام</a>-
</body>
</html>

همانطور که میبیند ما یک فایل استایل را هم به آن اضافه کردیم، که در پوشه style قرار دارد. اما یادتان باشد که مسیر پوشه style در‌ واقع در پوشه public است.

حالا میخواهیم زمانی که کاربر صفحه index را باز کرد، فایل بالا رندر و نمایش داده شود. فایل routes.php از پوشه app را باز میکنیم. زمانی که این فایل را باز میکنید، کدهای زیر درون آن قرار دارد.

Route::get('/', function() {
  return View::make('hello');
});

کد بالا در‌ واقع میگوید هر زمانی که کاربر صفحه index (/) را باز کرد، فایل hello نمایش داده شود. شما میتوانید فایل hello را در پوشه views مشاهده کنید. تنها کاری که ما باید انجام دهیم، این است که hello را به home تغییر دهیم.

بعد از انجام کار بالا، صفحه اصلی سایت را باز میکنیم، و مشاهده میکنیم که فایل home نمایش داده میشود.

اگر به دقت کدهای فایل home.blade.php را که در بالا نوشتیم مشاهده کنید، ما یک لینک ثبت نام هم قرار داده‌ایم، که با کلیک کردن کاربر روی آن، به مسیر register/ منتقل میشود. ابتدا یک فایل به نام register.blade.php در پوشه views میسازیم و کدهای زیر را درون آن قرار میدهیم.

<!DOCTYPE html>
<html>
<head>
  <title>Register</title>
  <meta charset="utf8">
  <link rel="stylesheet" type="text/css" href="../style/main.css">
</head>
  <h1>ثبت نام کاربران</h1>
</html>

حالا باید در فایل routes.php کدی قرار دهیم که زمانی که کاربر آدرس register/ را باز کرد، صفحه register.blade.php نمایش داده شود. برای اینکار کد زیر را درون فایل routes.php قرار میدهیم.

Route::get('/register', function() {
  return View::make('register');
});

حالا به صفحه اصلی می‌رویم و روی لینک کلیک میکنیم. بسته به نوع سرور شما ممکن است، وارد صفحه register شده باشید و یا با صفحه 404 روبرو شوید. اگر صفحه register برای شما باز شده باشد که همه چیز درست است. اما اگر باز نشده است، باید کدهای درون فایل htaccess. را چک کنید.

در‌ واقع آدرس اصلی صفحه register آدرس http://example.com/index.php/register میباشد، ولی ما باید با استفاده از کدهای htaccess آدرس آن را به http://example.com/register تغییر دهیم.

این روش برای استفاده در VPS یا localhost است. ابتدا کدهای داخل فایل htaccess. را که درون پوشه public است، مشاهده کنید. مشابه کدهای زیر است.

<IfModule mod_rewrite.c>
	RewriteEngine on

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d

	RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

میبینید که در کد بالا از ماژول rewrite استفاده کردیم. برای استفاده از این روش باید ماژول rewrite فعال باشد. برای فعال کردن این ماژول در سیستم عامل های بر پایه Debian و احتمالاً OS X از کد زیر استفاده کنید.

sudo a2enmod rewrite
sudo service apache2 restart

در سیستم عامل ویندوز باید در تنظیمات سرویس دهنده apache خود، این ماژول را فعال کنید.

اما اگر به هر دلیلی از این روش نتوانستید استفاده کنید و یا هاست شما این ویژگی را غیرفعال کرده بود، کدهای زیر را جایگزین کدهای قبلی کنید. کدهای زیر در localhost ممکن است جواب ندهند. برای localhost باید از روش بالا استفاده کنید.

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

خب حالا به صفحه اصلی می‌رویم و روی لینک ثبت نام کلیک میکنیم، مشاهده میکنیم که وارد صفحه ثبت نام شده‌ایم.

نتیجه‌ گیری

ما تا این مطلب مشغول آماده سازی Laravel بودیم. کارهایی از قبیل حذف آدرس public، درست کردن permissionها و حذف index.php از آدرس سایت بودیم، ولی در این مطلب با مسیریابی هم آشنا شدیم.

اطلاعات کامل در مورد Routing

این مطلب از سری مطالب، آموزش فریم ورک Laravel است
  • علیرضا می‌گه:

    اگر بشه مطالب رو به صورت جامع تر و کلی توضیح بدین خیلی بهتر میشه
    اول از همه بهتره MVC رو توضیح بدین

  • hasti می‌گه:

    با سلام و تشکر فراوون بابت توضیحات بی دریغ تون .

    من همین کار رو انجام دادم اما وقتی ثبت نام رو کلیک می کنم به جای رفتن به صفحه ی localhost/laraveltest/public/register میره به صفحه ی localhast:/register که وجود نداره . ممکنه راهنماییم کنید؟

  • احمد می‌گه:

    من / قبل از register رو در این کد برداشتم

    ثبت نام

    الان داره درست کار میکنه اما آدرس به این صورت میاد
    http://localhost/project/public/register

    این درسته؟؟

  • احمد می‌گه:

    سلام من این ماژول rewrite رو هر کار میکنم نمیتونم نصب کنم باز هم لینک هام ارور 404 میده میتونید راهنمایی کنید؟؟

    • محسن شفیعی می‌گه:

      فکر کنم سیستم عامل شما ویندوز باشه که متاسفانه من خودم توی این سیستم عامل تست نکردم.
      در Ubuntu همون کدهای نوشته شده جواب میده. برای ویندوز اطلاعات دقیقی ندارم.

    • احمد می‌گه:

      سلام بله با ویندوز کا میکنم حالا اگر میشه کمکم کنید خودم خیلی گشتم وللی نتیجه نگرفتم اگه میشه کمکم کنید

    • مرتضی می‌گه:

      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ /project_folder_name/index.php/$1 [L]

      ErrorDocument 404 /project_folder_name/index.php

  • محمد جهانی می‌گه:

    محسن جان بقیه رُوت‌ها رو آموزش نمیدین؟ فقط get؟

    • محسن شفیعی می‌گه:

      چشم. سعی میکنم اصل مطلب رو ابتدا بگم. اگه فرصت شد باز داخل مطالب بعدی هم نکته هایی اضافه در مورد مطالب قبل رو میگم.

  • رضا طاهری می‌گه:

    سلام خسته نباشید
    لطفا اگه می شه فریم ورک yii هم توضیح دهید

    • محسن شفیعی می‌گه:

      متاسفانه از دست من که چنین کاری بر نمی آید. مگر اینکه کاربران دیگه آپارنت که مشتاق اینکار و یا نویسندگی هستند، اینکار رو انجام بدهند.


  • نظرات این مطلب بسته است.