PDA

View Full Version : ویرایش اطلاعات بدون ارسال ID از طریق فرم (حل شد)



mostafa_shoakry
یک شنبه 06 بهمن 1392, 19:39 عصر
با سلام و خسته نباشید
کارایی که انجام دادم اینها هستن:
ارسال اطلاعات به فرم ویو برای انجام عمل ویرایش:


<a href="<?php echo Yii::app()->createUrl('admin/links/view/id/'.$link->attributes['id']); ?>" class="ctrlButton">
<img src="<?php echo Yii::app()->baseUrl; ?>/assets/admin/img/icons/14x14/cog2.png" alt="">
</a>

فیلتر در کنترلر و متد view


private $_link = null;

public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'linkContext + view '

);
}
public function filterLinkContext($filterChain)
{
if(isset($_GET['id']))
{
$link =Links::model()->findAllByPk($_GET['id']);
if( $link == null)
{
throw new CHttpException(404 , 'لینک مورد نظر یافت نشد.');
}
$this->_link = $link;
}else{

throw new CHttpException(403 , 'لینک مورد نظر یافت نشد.');
}
$filterChain->run();
}

public function actionView()
{
$model = new Links;
$linkBy = $model->findByPk($this->_link[0]->attributes);
if($linkBy == null)
{
throw new CHttpException(404, 'لینک موردنظر یافت نشد.');
}
$links = Links::model()->findAll(array("order" => "id desc"));
$this->render('view',array('content' => $linkBy,'links' => $links));
}


و ویو من :



<form id="validate" method="post" action="<?php echo Yii::app()->createUrl('admin/links/edit') ?>">
<div class="formWizard">
<div class="row-fluid">
<div class="span2">
<span class="fLabel">عنوان</span>
</div>
<div class="span10">
<?php echo CHtml::activeTextField($content,'title',array('id' =>'name')) ?>

</div>
</div>
</div>

<div class="formWizard">
<div class="row-fluid">
<div class="span2">
<span class="fLabel">لینک</span>
</div>
<div class="span10">
<?php echo CHtml::activeTextField($content,'destination') ?>

</div>
</div>
</div>
<div class="formButtons">
<div class="row-fluid">
<div class="span12" align="right">

<button type="submit" class="button sButton bOlive">ثبت</button>
<button type="reset" class="button sButton bSky">پاک کردن</button>
</div>
</div>
</div>
</form>


اینم متد edit من در کنترلر


public function actionEdit()
{
///
//var_dump($update);
$model = new Links;
if(isset($_POST['Links']))
{
$model->attributes = $_POST['Links'];
if($model->validate())
{
$update = Links::model()->updateByPk($this->_linkId, array(
'title' => $_POST['Links']['title'],
'destination' => $_POST['Links']['destination']
)
);
if($update == 1)
{
Yii::app()->user->setFlash('success', $update);
}
else {
Yii::app()->user->setFlash('success', $this->_linkId);
}

$this->redirect(array('/admin/links/index'));
}
else
{
Yii::app()->user->setFlash('error', $model->getErrors());
$this->redirect(array('index'));
}
}
$links = $model->findAll(array("order" => "id desc"));
$this->render('index',array('model' => $model,'links' => $links));
}


مشکل اینجاست که من چون فیلتر رو برای متد view تنظیم کردم واسه edit کار نمیکنه.حالا سوالم اینه که آیا من باید مقدار id آن رکوردی که قراره ویرایش بشه رو از طریق فرم بفرستم مثل این:


<a href="<?php echo Yii::app()->createUrl('admin/links/view/id/'.$link->attributes['id']); ?>" class="ctrlButton">
<img src="<?php echo Yii::app()->baseUrl; ?>/assets/admin/img/icons/14x14/cog2.png" alt="">
</a>

و یا آیا راه حل دیگه هم هست؟ یعنی تعریف فیلتر و یا هر روش دیگه
ممنون میشم منو راهنمایی کنین :چشمک:

MMSHFE
یک شنبه 06 بهمن 1392, 21:39 عصر
اول از همه عادت کنید لینکها رو استاندارد بسازین تا بعداً اگه Ruleهای urlManager تغییر کرد، ساختار لینکها هم تغییر کنه:


<a href="<?php echo Yii::app()->createUrl('admin/links/view', array('id' => $link->attributes['id'])); ?>" class="ctrlButton">
<img src="<?php echo Yii::app()->baseUrl; ?>/assets/admin/img/icons/14x14/cog2.png" alt="">
</a>

فیلترتون درسته فقط update رو هم بهش اضافه کنید:


public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'linkContext + view edit'

);
}

ویوی view :


<form id="validate" method="post" action="<?php echo Yii::app()->createUrl('admin/links/edit', array('id' => $content->id)); ?>">
<div class="formWizard">
<div class="row-fluid">
<div class="span2">
<span class="fLabel">عنوان</span>
</div>
<div class="span10">
<?php echo CHtml::activeTextField($content,'title',array('id' =>'name')) ?>
</div>
</div>
</div>
<div class="formWizard">
<div class="row-fluid">
<div class="span2">
<span class="fLabel">لینک</span>
</div>
<div class="span10">
<?php echo CHtml::activeTextField($content,'destination') ?>
</div>
</div>
</div>
<div class="formButtons">
<div class="row-fluid">
<div class="span12" align="right">
<button type="submit" class="button sButton bOlive">ثبت</button>
<button type="reset" class="button sButton bSky">پاک کردن</button>
</div>
</div>
</div>
</form>

این هم میشه کد اکشن edit شما:


public function actionEdit($id)
{
$model = new Links;
if(isset($_POST['Links']))
{
$model->attributes = $_POST['Links'];
if($model->validate())
{
$update = Links::model()->updateByPk($this->_linkId, array(
'title' => $_POST['Links']['title'],
'destination' => $_POST['Links']['destination']
)
);
if($update == 1)
{
Yii::app()->user->setFlash('success', $update);
}
else {
Yii::app()->user->setFlash('success', $this->_linkId);
}

$this->redirect(array('/admin/links/index'));
}
else
{
Yii::app()->user->setFlash('error', $model->getErrors());
$this->redirect(array('index'));
}
}
$links = $model->findAll(array('order' => 'id DESC'));
$this->render('index',array('model' => $model, 'links' => $links));
}