
نوشته شده توسط
mojtaba.baghban
آیا پیاده سازی rule در مدلی که داریم با توجه به پیادهسازی آنها در پایگاهداده کار درستی است یا نه؟
درسته که mysql محدودیت چک رو پیادهسازی نکرده و اعمال این ruleها در آن کار طاقتفرسایی است ولی اکثر پایگاهدادهها از جمله postgresql اون رو پیاده کردند ومیشه براحتی قوانینی رو شبیه اون چیزی که تو yii تعریف شده رو جدولمون اعمال کرد به عنوان مثال بگیم فیلد ایمیل مطابق با فلان پترن باشد.
حالا اگه ما تمام قوانین رو تو پایگاهداده رو جدولمون اعمال کرده باشیم آیا باز لازمه تو مدلمون هم تعریف کنیم؟ آیا این باعث کند شدن برنامه (هر چقدر هم ناچیز باشد) نمیشود؟ اگر جواب مثبت است پس اعمال قوانین چه سودی دارد؟
لطفا جواب بدین تا تایپیک خاک نخوره
سلام دوست عزیز
همانطور که می دانید rule ها در yii علاوه بر اعمال کردن قوانین و محدودیت ها برای این طراحی شده اند که ما برای ورود اطلاعات از کاربر نیز محدودیت های لازم رو به عمل بیاوریم، ببینید، مثلا وقتی یک کاربر می خواهد آدرس ایمیل خود را وارد کند و ما نیز آن را در سمت سرور در دیتابیس ذخیره کنیم چرا باید اطلاعات به سمت سرور ارسال گردد بعد ما در سمت سرور بفهمیم که آدرس ایمیل مثلافرمت استاندارد ایمیل که مثلا aaa@Gmail.com است را ندارد؟ rule علاوه بر کنترل اطلاعات وارد شده توسط کاربر تا حدودی به شما کمک می کند تا از حملات sql injection نیز جلوگیری کنید یا مثلا محدودیت عددی بودن یک کادر را مشخص کنید و ....، پس rule ها تعریف می شوند نه فقط برای اعمال قوانین روی دیتابیس بلکه داده های ورودی از سمت کاربر را نیز می توانیم فیلتر کنیم و نگذاریم کاربر هر نوع داده ای رو سمت سرور ارسال کند مثلا بارها در rule ها دیده می شود چنین خطی خود Gii برای ما تولید می کند
// name, email, subject and body are required
array('name, email, subject, body', 'required'),
// email has to be a valid email address
array('email', 'email'),
خب در اینجا که دیگه دیتابیس نداریم که rule روی آن اعمال کنیم یک صفحه ی static ساده هست! پس آیا می توانیم بگذاریم کاربر حتی کادر ها را خالی سمت ما ارسال کند؟ جواب خیر هست! پی کاربرد سوم rule ها مشخص شد اونم در جاهایی که بانک داده نداریم اما می خواهیم برای ورود اطلاعات محدودیت ایجاد کنیم.
در پاسخ به سوال اینکه آیا تعریف rule صفحات را کند می کند یا نه شخصا نظرم اینه که یا شما باید WebApplication خود را به خطر بندازید و هر داده ای را از کاربر قبول کنید حتی sql injection یا rule تعریف کنید که باز هم تاکید می کنم این نظر شخصی منه انقدر کند نیست که ازش چشم پوشی کرد، ببینید yii یک فریم ورک ایزوله شدست، استاندار خود را کسب کرده است، پس انقدر می ارزه که بخواید سایت را کند کنید اما امنیت سایتتون را بالا ببرید که این کاربرد چهارم تعریف rule می باشد.
در پایان متذکر بشوم که این نظر شخصی من بود شما یک سری به این webapplication بزنید این webapp رو من با yii طراحی کردم، ببینید آیا کند شده یا مشکلی داره؟ این webapp بالغ بر 2000 فایل PHP پشتش هست که اگر yii و امکاناتش نبود واقعا به مشکل بر می خوردم! پس از طراحی و ساخت این پروژه به قدرت yii پی بردم. تا یادم نرفته باید حتما با مرورگر Chrome 23بازکنید، هنوز وقت نشده کاملش کنم.
موفق و سر بلند باشید.