:::::: روش استفاده از CFormModel :::: ( سوال )

[rtl]

به نام خدا.

دوستان من از تازه کار های یی هستم.

یه سوال داشتم در مورد استفاده از CFormModel برای ساخت فرم.

می خواستم بدونم آیا حتما باید با این کلاس فرم رو تولید کنیم و بعد با استفاده از AR اون رو وارد DB کنیم یا اینکه میشه مستقیم از همون AR استفاده کنیم و فرم رو تولید کنیم و بعد INSERT کنیم.

با تشکر

حامد سلیمانیان

[/rtl]

[rtl]

سلام، لازم نیست که از CFormModel استفاده کنی، این کلاس معمولا برای فرمهایی به کار میره که نیاز به ذخیره در دیتابیس نیست.

[/rtl]

[font="Tahoma"][rtl]پیشنهاد اکید بنده استفاده از CFormModel برای فرم هاست، چه با دیتابیس درگیر باشند و چه نباشند.

به نظر بنده اینکار اصولی تر است.

[/rtl][/font]

[rtl]

ممکنه بیشتر توضیح بدید، چون دلیل این تاکید رو درک نمیکنم

[/rtl]

[font="Tahoma"]

[rtl]

برای حل یک مسئله راه های زیادی وجود داره ولی باید بهترین و اصولی ترین راه رو انتخاب کرد.

برای هر چیزی ابزاری ساخته شده که باید در جای خودش استفاده بشه.

CFormModel اسمش روشه، مدلیه که با فرم درگیره.

CActiveRecord هم همونطور که از اسمش بر میاد مدلیه که با دیتابیس درگیره.

شما یک فرم دارید که قراره در دیتابیس ذخیره بشه، ابتدا توسط مدل CFormModel اطلاعات رو از فرم میگیرید و به مدل CActiveRecord میدید و متد save رو صدا میزنید.

این به نظر یک راه حل اصولی است.

البته بازهم این نظر بندست.

شاید بد نباشه این سوال رو در بخش فروم انگلیسی هم پرسید تا اساتید نظرات کارشناسی تری بدن

ممنون

[/rtl]

[/font]

[right][font="Tahoma"]

سلام

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

من قسمت زیر رو عینا کپی میکنم که نیازی به رجوع به لینک هم نباشه

[/font]

[/right]

[extract]

Depending on how we make use of the user input, we can create two types of model. If the user input is collected, used and then discarded, we would create a form model; if the user input is collected and saved into database, we would use an active record instead. Both types of model share the same base class CModel which defines the common interface needed by form.

[/extract]

[right][font="Tahoma"][rtl]

با توجه به این عبارت، هر زمانی که با دیتابیس و ذخیره داده ها سر و کار داریم باید با active record کار کنیم.

اگر مثال های خود فریمورک، مثل وبلاگی که به صورت آماده همراه فریمورک هست هم بررسی کنیم، میبینیم که از active record استفاده شده برای ورود و ذخیره داده ها

مورد دیگه هم فرایند آپدیت هست که بدون مفهوم active record زمان گیر و مشکل میشه، اما با استفاده از اون و همینطور active form که اختصاصا به همین دلیل ایجاد شده، این قسمت هم توسط فریمورک اداره میشه.

[/rtl]

[/font]

[/right]

[rtl]

من هم فکر میکنم استفاده از CActiveRecordبرای فرمهایی که با دیتابیس سرو کار دارند، روش درستتر باشه ، چون میشه برای یک مدل بدون اضافه کاری چندین فرم درست کرد، اما اگه قرار باشه برای هر فرم یک CFormModel ایجاد بشه هم مساله Validation از یکپارچگی خارج میشه ، و هم پروژه بیش از حد شلوغ میشه و امکان کپی کد تکراری افزایش پیدا میکنه

[/rtl]

[rtl][font="Tahoma"]خب باشه.

حالا صحبت روی فرم هایی بود که تمام فیلدها مستقیم با فیلدهای یک تیبل درگیر هستند.

شما بفرمائید مثلاً برای یک فرم ثبت نام که تکرار پسورد و کپچا کد داره بهترین گزینه کدومه؟

[/font][/rtl]

[rtl]

به نظر من از نظر کارایی فرق جندانی وجود نداره ، اما از نظر سازماندهی من ترجیح میدم مستقیما از اکتیو رکورد استفاده کنم

[/rtl]