وقتی پروژه ای رو با php خام بدون هیچ فریمورکی ایجاد میکنیم قطعا باید ساختاری رو برای آن در نظر بگیریم که بتوان بعدها به راحتی به بخشهای مختلف دسترسی داشت و برای توسعه آن هم راحتتر اقدام کنیم.
فایلهای مختلفی همچون config.php , functions.php , actions.php , … را بر اساس سلیقه های شخصی میتوان ساخت.
ساختاری که بسیاری از پروژهها و فریمورکهای معروف از آن استفاده میکنند ساختار MVC است که بر اساس Model , View , Controller این ساختار تعریف شده است. در مقاله ای دیگر در این رابطه خواهم نوشت ولی فعلا تا حد امکان سعی میکنم ساختار منظمی برای پروژه تعریف کنم و با شما به اشتراک بذارم.
مواردی که برای یک پروژه که با php خام ایجاد میشود را برای خودم توی این مقاله ذخیره میکنم.
فایل config پروژه :
فایلی را برای کانفیگ و تنظیمات کل پروژه در نظر میگیریم که در تمام بخش های پروژه در دسترس است.
۱ – ذخیره اطلاعات عمومی کل پروژه
اولین مورد ذخیره تمام اطلاعات کلی پروژه است که قرار است در کل پروژه استفاده شود. برای مثال نام کامل پروژه، آدرس دامنه وبسایت، تعداد مطالب/مقالات منتشر شده در هر صفحه و ….که من به صورت زیر این موارد را تعریف میکنم.
define('project_name', 'نام پروژه'); define('project_url', 'http://mekaeil.me'); ...
۲ – مشخصات اکانت ادمین ( اختیاری )
برای هر پروژه معمولا یک مدیرکل وجود دارد که به همه بخشهای وبسایت دارد. این نقش باید هنگام راه اندازی پروژه به صورت اتوماتیک ایجاد و در دیتابیس ثبت شود.
define('admin_username','mekaeil.me') define('admin_email','info@domain.com')
۳ – فعال کردن نمایش خطاهای برنامه نویسی
قطعا در هنگام پیاده سازی پروژه نیاز داریم که خطاهایی که هنگام پیاده سازی و برنامه نویسی پروژه انجام میدهیم به ما نمایش داده شود. پس در ابتدای کار حتما این خطاها را نمایش میدهیم.
ini_set('display_errors','on'); error_reporting(E_ALL);
نکته مهم : هنگام اتمام پروژه و راه اندازی این موارد باید غیرفعال شوند.
۴ – اتصال به دیتابیس
برای دسترسی به دیتابیس لازم است اطلاعات اتصال به دیتابیس را در بخشی از پروژه قرار دهیم که بهترین بخش برای قراردادن این اطلاعات فایل config پروژه است.
$db_host = 'localhost'; $db_user = 'user_project'; $db_password = 'database password'; $db_name = 'database name';
با توجه به اینکه فایل کانفیگ در کل پروژه استفاده میشود میتوان اتصال به دیتابیس را هم در همین قسمت انجام داد به طوریکه لازم نباشد در هر قسمتی از پروژه این اتصال انجام شود.
همچنین اتصال دیتابیس را چک کنیم که در صورتیکه به هر دلیلی دیتابیس وصل نبود پروژه نمایش داده نشود.
$db = new mysqli($db_host,$db_user,$db_password,$db_name); // checking connection Database if ( $db->connect_errno ) { print_r("connection Faild : ", $db->connect_error ); exit(); }
۵ – تنظیم یونیکد برای حروف فارسی
برای ثبت و نمایش درست اطلاعات فارسی لازم است یونیکد پروژه را روی utf-8تنظیم کنیم که دادهها به درستی ذخیره و نمایش داده شوند.
$db->query('SET NAMES UTF8;');
۶ – تعریف جدولهای دیتابیس
در طول پروژه لازم است که queryهایی نوشته و اجرا شوند که باید به جداول مختلف دیتابیس برای اجرای این queryها نیاز داریم. برای اینکه راحتتر بتوانیم به آنها دسترسی داشته باشیم آنها را در فایل کانفیگ ست میکنیم. همانطور که مشاهده میکنید برای جداول users و posts من نام آنها را تعریف کردم.
( نکته : $db در کدهای بالاتر فایل کانفیگ به دیتابیس متصل شده است. )
$db->usersTable = "users"; $db->postsTable = "posts";
فایل کانفیگ میتواند به مرور بر اساس پروژه کاملتر شود، بعد از ساخت فایل cconfig.php در قسمت هدر پروژه که در تمام بخشهای پروژه تعریف شده است این فایل را به صورت include_once ‘config.php’ فراخوانی میکنید، از این پس در تمام بخش ها به محتواهای این فایل دسترسی دارید.
فایل توابع پروژه php :
همانطور که در ساختار پروژه فایلی برای تنظیمات کل پروژه داریم قطعا باید فایلی برای توابع پر کاربرد و مورد استفاده در طول پروژه داشته باشیم. برای مثال در سیستم مدیریت محتوای وردپرس فایلی به نام functions.php در پروژه استفاده میشود که تمامی توابع مورد نیاز را در آن قرار میدهیم.
در این فایل توابعی که در طول پروژه نیاز است تعریف میشوند و با تکمیل پروژه تکمیلتر خواهد شد.
برای مثال توابعی همچون is_login , create_user , update_post و … را میتوان در این فایل تعریف کرد.
فایلی برای مدیریت فرمها و اکشنها :
فایلی را با نامی دلخواه مثلا actions.php در نظر بگیریم که برای مقادیری که فرمها ارسال میکنند مدیریت نماید. در واقع در این فایل چک میشود که آیا مقادیر این فرم ست شده است ( isset($_POST[‘input’]) ) که توابع داخل آن اجرا شود یا خیر.
بیشتر تعاملات کاربر با وبسایت معمولا از طریق فرمها صورت میگیرد.
نکته ۱ : با توجه به اینکه تمام عملیات و کارهایی که انجام میدهیم نیاز به فایل actions دارند پس میتوانیم در قسمت head پروژه فایل actions را include_once نمود و فایلهای config و functions را در بالاترین قسمت این فایل، به صورت include_once فراخوانی کنیم.
نکته ۲ : با توجه به موارد موفق تا به اینجای کار اگر بخواهیم مقایسه ای با ساختار MVC داشته باشیم، فایل functions.php که تعریف کردیم در واقع همان Model برای کار با دیتابیس، فایل actions.php همان Controller هستند و بخش View هم همانطور که میدانید بخش UI پروژه است.
نکته ۳ : با توجه به اینکه ما در پروژه خود از SESSION معمولا استفاده میکنیم پس لازم است در بالاترین قسمت فایل function حتما session_start() را قرار دهیم.
نکته ۴: میتوان برای درخواستهایی که به صورت Ajax ایجاد میشوند فایلی متمایز از actions را در نظر گرفت.
لازم است اشاره کنم در این مقاله به ساختار یک پروژه ساده بدون شیگرایی پرداختم که قطعا در حالت شی گرایی میتوان تغییرات زیادی اعمال کرد. در مقاله بعدی این مورد را بررسی میکنم.