اضافه کردن منوی drop-down
فایلی رو که حاوی فرممون هست رو باز کنید این فرم در مسیر protected/views/issue/_form.php قرار دارد ، سژس خطی رو که با کدهای زیر مطابقت میکنه رو پیدا کنید:
<div class="row">
<?php echo $form->labelEx($model,'type_id'); ?>
<?php echo $form->textField($model,'type_id'); ?>
<?php echo $form->error($model,'type_id'); ?>
</div>
این خط هایی که در بالا قرار دادیم احتیاج دارن که کمی برای شما روشن بشن که چی هستند. برای این کدها رو بفهمی نیاز داریم که به بعضی از کدهایی که در بالای فایل _form.php قرار دارند مراجعه کنیم که این کدها به شرح زیر هستند:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'issue-form',
'enableAjaxValidation'=>false,
)); ?>
این متغیر $form که دارید میبینید متغیری است که با ویجت CActiveForm در Yii تعریف شده است.یا به عبارت دیگر تغیر $form یک نوعی از CActiveForm میباشد و از اون گسترش یافته است.البته باید بگم در مورد ویجت ها Widgets در فصل 9 به طور کامل توضیح داده خواهد شد. در حال حاضر ما میتونیم توسط درک CActiveForm. بهتر این مطالب رو درک کنیم.این رو میتونید تصور کنید که یک کلاس کمکی است که مجموعه ای از method ها "متدها" میباشد برای کمک به ما در ساخت یک فرم برای ثبت داده ها که مربوط به یک مدل کلاس داده است.در این مورد، این نشان داده شده است به وسیله مدل کلاس Issue .
برای درک کامل متغیرها در فایل View ، اجازه دهید همچنین بررسی کنیم کدهای controller رو که رندر میکنه فایلهای view رو.همانطور که شما به یاد میآورید، یک راه برای پاس کردن داده ها از کنترلر به ویو به وسیله آرایه بود، کلیدها یا همون keys که نامهایی در دسترس هستند که در فایلهای View میتونید از اونها استفاده کنید. از آنجایی که عمل create برای ساخت یک Issue جدید استٰ متد controller رندر میکنه از IssueController::actionCreate(). این متد به صورت زیر است:
public function actionCreate()
{
$model=new Issue;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Issue']))
{
$model->attributes=$_POST['Issue'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
اینجا ٰ مبینیم که وقتی view در حال رندر شدن استٰ اون ژاس کرده است به طور مثال از مدل کلاس Issueٰ که در دسترس خواهد بود در یک متغیر که اونو $model نامگذاری کردیم.خوب بیایید برگردیم به کدهایی که عهده دار رندر کردن فیلد Type برای ساختن Issue جدید اط طریق فرم ورودی بود. خط اول است:
$form->labelEx($model,'type_id');
این خط استفاده کرده از متد CActiveForm::labelEx() برای رندر یک lable html برای ویژگی typr_id مدل issue .این میگیره در یک نمونه از مدل کلاسٰ و ویژگی مدل مربوطه کخ ما میخواهیم یک برچسب باشد را تولید می کند.مدل کلاس Issue::attributeLabels() روشی خواهد بود برای استفاده lable . اگر ما نگاهی به این روش بندازیم ٰ ما میبینیم که ویژگی type_id مثل یک lable یا برچسب ترسیم شده است.که در حال حاظر همان چیزی است که ما می خواهیم.
public function attributeLabels()
{
return array(
'id' => 'ID',
'name' => 'Name',
'description' => 'Description',
'project_id' => 'Project',
'type_id' => 'Type',
'status_id' => 'Status',
'owner_id' => 'Owner',
'requester_id' => 'Requester',
'create_time' => 'Create Time',
'create_user_id' => 'Create User',
'update_time' => 'Update Time',
'update_user_id' => 'Update User',
);
}