یه سوال داشتم در مورد استفاده از CFormModel برای ساخت فرم.
می خواستم بدونم آیا حتما باید با این کلاس فرم رو تولید کنیم و بعد با استفاده از AR اون رو وارد DB کنیم یا اینکه میشه مستقیم از همون AR استفاده کنیم و فرم رو تولید کنیم و بعد INSERT کنیم.
برای حل یک مسئله راه های زیادی وجود داره ولی باید بهترین و اصولی ترین راه رو انتخاب کرد.
برای هر چیزی ابزاری ساخته شده که باید در جای خودش استفاده بشه.
CFormModel اسمش روشه، مدلیه که با فرم درگیره.
CActiveRecord هم همونطور که از اسمش بر میاد مدلیه که با دیتابیس درگیره.
شما یک فرم دارید که قراره در دیتابیس ذخیره بشه، ابتدا توسط مدل CFormModel اطلاعات رو از فرم میگیرید و به مدل CActiveRecord میدید و متد save رو صدا میزنید.
این به نظر یک راه حل اصولی است.
البته بازهم این نظر بندست.
شاید بد نباشه این سوال رو در بخش فروم انگلیسی هم پرسید تا اساتید نظرات کارشناسی تری بدن
شاید بد نباشه نگاهی به مستندات خود فریمورک بندازیم در این رابطه
من قسمت زیر رو عینا کپی میکنم که نیازی به رجوع به لینک هم نباشه
[/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 که اختصاصا به همین دلیل ایجاد شده، این قسمت هم توسط فریمورک اداره میشه.
من هم فکر میکنم استفاده از CActiveRecordبرای فرمهایی که با دیتابیس سرو کار دارند، روش درستتر باشه ، چون میشه برای یک مدل بدون اضافه کاری چندین فرم درست کرد، اما اگه قرار باشه برای هر فرم یک CFormModel ایجاد بشه هم مساله Validation از یکپارچگی خارج میشه ، و هم پروژه بیش از حد شلوغ میشه و امکان کپی کد تکراری افزایش پیدا میکنه