تالار گفتمان nCIS.ir

نسخه‌ی کامل: Adduser در جلسه هشت
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
من جلسه هشت هستم
در این جلسه از ویویaadduser مقادیری را دریافت میکنیم
این مقادیر را برای کجا میفرستیم؟
با تشکر
منظورم اینه چرا از action and method برای ارسال مقادیر استفاده نکرده ایم؟
مگر برای ارسال مقادیر نباید از اینها استفاده کرد؟ این مقادیر دریافت شده به کجا ارسال میشوند؟
مچکرم
جایی که میگیم this->beginWidget$ و ویجت CActiveForm رو میسازیم، داره یه فرم ساخته میشه که به همون اکشن adduser از کنترلر project اطلاعات دریافتی رو ارسال میکنه.
پس یعنی برای کلاس projectuserForm ارسال نمی شوند؟
من تمام این مدت فکر می کردم مقادیر از ویو برای کلاس هایی که در فولدر model قرار دارند ارسال می شوند و فیلد های شی ای از ان کلاس را تشکیل می دهند.
شاید اول به کلاس projectUserForm ارسال می شوند بعد به اکشن adduser نه؟ این طور نیست استاد؟
خیر اون فقط یه مدل برای اعتبارسنجی فرم هست. مدل که کارش تحلیل و پردازش نیست. فقط نماینده یک رکورد هست (CActiveRecord) یا مجموعه تعدادی فیلد و قواعد اعتبارسنجیشون (CFormModel). توی خود کنترلر هم شما اعتبارسنجی رو انجام میدین (البته با کمک مدل) :
if($model->validate()) { ... }
ویجت چیست استاد ؟
کجا میتونم انرا و کارکردن با
ان را یاد بگیر م؟
ما در پایان اکشن addUser ویوی adduser را رندر می کنیم
حالا اگر اطلاعات از ویو برای اکشن adduser ارسال شوند که موجب اجرای مجدد متد actionAddUser می شود و این طوری وارد یک چرخه می شویم
اما در عمل این اتفاق نمی افتد .
حالا من یه حدسی زدم به نظر شما درسته:
وقتی کنترولر project باشد و اکشن adduser (این باید در مورد همه ی اکشن ها صدق کند) ابتدا همه ی دستورات متد actionAddUser اجرا نمی شوند بلکه فقط دستور رندر ویو ارسال می شود. بعد از این که ویو نمایش داده شد و اطلاعات دریافت شد باز همان متد اجرا می شود اما این بار دستور رندر کردن اجرا نمی شود. درسته؟
نه . این حدس من نمیتونه درست باشه زیرا $form باید حتما ایجاد بشه بعد ارسال شه.
نمی دونم گیج شدم.
خیر اینطور نیست. رندر کردن ویوی adduser به معنای اجرای مجدد متد actionAddUser نیست و فقط اسمشون شبیه همه. شما میتونید توی هر اکشنی، هر ویویی که میخواین رو رندر کنید. توی هر ویو میتونید یک ویوی فرعی دیگه رو هم رندر کنید. کلاً رندر کردن ویو به معنای اجرای اکشن نیست چون اکشن متعلق به کنترلر هست و فقط با ارسال درخواست توسط کاربر (توی مرورگر) اجرا میشه.

اما درمورد حدستون باید بگم اشتباهه. وقتی شما اکشن رو صدا میزنید، دستوراتش به همون ترتیب و ساختاری که نوشته شدن اجرا میشن ولی همونطور که گفتم، وقتی میگیم ویو رو رندر کنه، فقط باعث میشه فایل ویو پردازش بشه و متغیرهای لازم براش ارسال بشه و درنهایت خروجی اون به متغیر content$ داخل Layout مشخص شده توی برنامه ارسال بشه و اون Layout هم پردازش بشه و خروجی نهایی درقالب Response درخواست کاربر، برای مرورگرش ارسال بشه.