در جلسه قبل توانستیم آدرس درخواستی کاربر را با روش get و فایل htaccess دریافت و متوجه شویم که در حال حاضر کاربر چه مسیری را درخواست کرده است.
آدرس ارسال شده پس از نام دامنه اصلی را با استفاده از / جدا کرده ایم.مقدار اول نام کلاس و مقدار دوم متدی است که درخواست شده است.
فایل htaccess
1 2 |
RewriteEngine on RewriteRule ^(.+)$ index.php?param=$1 [QSA,L] |
دستور شرطی در htaccess
در فایل htaccess برای گذاشتن شرط می توانیم از دستور RewriteCond استفاده کنیم. بعد از این دستور یک % قرار داده و شرط خود را مشخص می کنیم.
مثال:
1 |
RewriteCond % |
دستور شرطی را درون آکلاد باز و بسته قرار می دهیم.
1 |
RewriteCond %{} |
برای مثال ما میخواهیم شرط تعیین کنیم که در صورتی درخواست فایل داده شد آن را اجرا کن.
مثال:
1 |
RewriteCond %{REQUSET_FILENAME} |
در آخر این دستور از flag به صورت f-! استفاده می کنیم. با استفاده از این دستور می توان شرط تعیین کرد که در صورتی که فایل نبود (در اینجا f یعنی file) برو به خط بعد.پیش فرض حالت را بر این اساس قرار می دهد که فایل درخواست شده وجود دارد.
مثال:
1 |
RewriteCond %{REQUSET_FILENAME} !-f |
دستور دیگری که می توانیم شرط تعیین کنیم اینکه اگر فایل درخواست شده در دایرکتوری مورد نظر بود آن را اجرا کن در غیر اینصورت برو خط بعد. flag
مربوط به دایرکتوری d-! است.پیش فرض حالت را بر این اساس قرار می دهد که فایل در دایرکتوری درخواست شده وجود دارد.
مثال:
1 |
RewriteCond %{REQUSET_FILENAME} !-d |
فایل index.php
1 2 3 4 5 6 7 |
<?php $param = explode('/',$_GET["param"]); $controllName = $param[0]; if(file_exists("Controllers/".strtolower($controllName).".php")){ require_once "Controllers/".strtolower($controllName).".php"; } ?> |
اجرای متد کلاس درخواستی
فرض کنید کاربر وارد مسیری به نام http://localhost/mvc/admin شده است بنابراین باید کلاس admin اجرا شود.
در پوشه Controllers نیز فایلی به نام admin.php بعنوان یک کلاس ایجاد کرده ایم که دارای دستورات زیر است.
مثال:
1 2 3 4 5 6 7 8 9 10 11 |
<?php class admin{ public function __construct(){ echo "this is admin construct"; } public function newPost(){ echo "this is admin method"; } } ?> |
حال برای اجرا شدن کلاس باید آبجکت از روی آن ساخته شود.
مثال:
1 2 3 4 5 6 7 8 |
<?php $param = explode('/',$_GET["param"]); $controllName = $param[0]; if(file_exists("Controllers/".strtolower($controllName).".php")){ require_once "Controllers/".strtolower($controllName).".php"; $obj = new $controllName; } ?> |
خروجی:
1 |
this is admin construct |
اجرای متد کلاس
برای اجرای متد کلاس admin به مسیر http://localhost/mvc/admin/newpost می رویم.
با وارد شدن به مسیر دوم در صورت وجود داشتن متد اجرا می شود.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $param = explode('/',$_GET["param"]); $controllName = $param[0]; if(file_exists("Controllers/".strtolower($controllName).".php")){ require_once "Controllers/".strtolower($controllName).".php"; $obj = new $controllName; if (isset($param[1])){ $methodName = $param[1]; $obj->$methodName(); } } ?> |