بکندباز

آدرس دهی صفحات سایت در php

سلام دوستان. در این آموزش می خوایم با هم نحوه ی آدرس دهی صفحات با php به صورت کاربرپسند را با استفاده از یک کتابخانه ی php به نام AltoRouter یاد بگیریم. یعنی مثلاً در یک فروشگاه اینترنتی برای نمایش صفحه یک محصول به جای آدرس زیر:

https://yoursite.com/product.php?id=43

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

https://yoursite.com/product/43

یا:

https://yoursite.com/product/title

پیش نیاز: آموزش php

نصب کتابخانه

برای نصب این کتابخانه از دو طریق می توانیم اقدام کنیم:

1- نصب از طریق composer

برای اینکار باید از قبل composer را نصب کرده باشید. پس از نصب composer، فایلی با نام composer.json در پوشه ی اصلی سایت خود ایجاد کرده و کد زیر را درون آن بنویسید:

{
    "require": {
        "altorouter/altorouter": "1.1.0"
    }
}

و پس از آن با دستور زیر، کتابخانه را نصب کنید:

php composer.phar install

اگر با این روش کتابخانه را نصب کنید، از طریق کد زیر باید کتابخانه را در فایل index.php اصلی سایت خود وارد کنید:

require 'vendor/autoload.php';

2- نصب دستی

در این روش ابتدا با استفاده از لینک زیر، ابتدا کتابخانه را دانلود کنید:

دانلود کتابخانه

پس از دانلود، یک فایل zip خواهید داشت. فایلی به نام AltoRouter.php را در این فایل zip پیدا کرده و آن را در جایی از هاست خود آپلود کنید. سپس آن را با استفاده از دستور require در فایل index.php خود وارد کنید (با توجه به جایی که فایل را آپلود کرده اید، مسیر نسبی را تغییر دهید):

require 'AltoRouter.php';

نحوه ی تنظیم آدرس ها

پس از نصب و require کردن فایل مورد نیاز، یک شیء به نام router$ از کلاس AltoRouter ایجاد می کنیم:

$router = new AltoRouter()‎;

phgh نوبت به آدرس دهی صفحات می رسد. یکی یکی صفحات را به شکل زیر آدرس دهی می کنیم و برای اینکار از متد map استفاده می کنیم:

$router->map( 'GET', '/products', 'products.php', 'products' );

پارامتر اول، می تواند یک یا چند متد های ارسال باشد:

GET|POST|PATCH|PUT|DELETE

بر اساس مجوزی که می خواهید به کاربر بدهید، این متد ها را انتخاب کنید. اگر کاربر می تواند صفحه را در مرورگر ببینید، باید متد GET را حداقل داشته باشد. اگر در صفحه فرمی دارید که با استفاده از متد POST قرار است داده ای ارسال شود، متد POST را نیز به آن صفحه اضافه کنید. مثلاً متد POST در صفحات ورود و ثبت نام، یا در هنگام ارسال کامنت کاربرد دارد. باقی متد ها را نیز در آدرس صفحاتی که به آنها احتیاج دارند اضافه کنید.

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

$router->map( 'GET', '/products', 'products.php', 'products' );
$router->map( 'GET|POST', '/product/[i:id]', 'product.php', 'product' );
$router->map( 'GET|POST', '/login', 'login.php', 'login' );
$router->map( 'GET', '/profile/[a:username]', 'profile.php', 'profile' );

پارامتر سوم، پارامتر target است. یعنی این آدرس به چه فایل هدفی متصل می شود. در این قسمت نام فایلی که می خواهید برای این آدرس باز شود را وارد کنید.

و پارامتر آخر، یک شناسه ی یکتا مربوط به هر آدرس است که آدرس با آن شناسه، از دیگر آدرس ها مشخص می شود. برای این پارامتر یک نام دلخواه و یونیک برای هر آدرس انتخاب کنید.

افزودن پارامتر به آدرس

همانطور که در بخش قبل دیدید، بعضی آدرس ها عبارتی داخل [] دارند. این عبارت متغیر است و به عنوان پارامتر آدرس شناخته می شود. برای آدرس هایی مثل آدرس صفحه محصول که بر اساس شناسه ی محصول تغییر می کند اما همه به یک فایل متصل می شوند یا آدرس مربوط به پروفایل کاربر که یک آدرس یکسان است با این تفاوت که برای هر کاربر، نام کاربری متفاوتی قرار می گیرد، از این متغیر ها استفاده می کنیم.

آدرس صفحه محصول:

https://yoursite.com/product/42

https://yoursite.com/product/81

https://yoursite.com/product/56

یا آدرس پروفایل:

https://yoursite.com/profile/zohreh

https://yoursite.com/profile/alireza

https://yoursite.com/profile/ahmadi70

در آدرس صفحه محصول، اعداد 42، 81، و 56 متغیر هستند و در آدرس صفحه محصول عبارات zohreh و alireza و ahmadi70 متغیر هستند.

هر متغیر یک نوع و یک نام دارد. نام متغیر چیزی است که بعداً در فایل php با استفاه از آن مقدار متغیر را به دست می آوریم:

[نام متغیر: نوع متغیر]

برای اعداد از حرف i، برای حروف از حرف a و برای همه مدل کاراکتر از علامت * استفاده می کنیم:

$router->map( 'GET|POST', '/product/[i:id]', 'product.php', 'product' );
$router->map( 'GET', '/profile/[a:username]', 'profile.php', 'profile' );

تطبیق آدرس

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

$match = $router->match()‎;

اگر آدرسی مطابق با آدرس وارد شده پیدا شد، متد match یک آرایه ی انجمنی در خروجی ارسال می کند. این آرایه شامل سه کلید target و params و name است. مقدار target همان مقدار پارامتر سوم آدرس دهی است. کلید params خود شامل یک آرایه ی انجمنی از متغیر های آدرس است و مقدار name همان پارامتر آخر آدرس و یا شناسه ی آدرس است.

حال فایل php خود را که نام آن در پارامتر target است با استفاده از دستور require وارد می کنیم. و همچنین متغیر های مختلف را با استفاده از کلید params به دست آورده و در فایل php اصلی خود از آنها استفاده می کنیم:

$match = $router->match()‎;

//اگر آدرسی مطابق آدرس وارد شده پیدا شد...
if($match){
    $target = $match['target'];
    $params = $match['params'];
    $name = $match['name'];

    require "$target";

} else {
    //در غیر اینصورت ارور برگردانده شود
    header("HTTP/1.0 404 Not Found");
    header("location: /404");
}

 

zohreh

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

دیدگاه‌ها

*
*