PDA

View Full Version : چگونگی فرستادن داده های فرم با متد get (حل شد)



mahdirabbani
پنج شنبه 10 بهمن 1392, 12:17 عصر
سلام دوستان
می خواستم بدونم چگونه می شه داده هامون را در اکشن create یا هر اکشن دیگه ، به جای این که با متد post بفرستیم ، با get بفرستیم. به گونه ای که دیگه نشه با post فرستاد.
برای نمونه:
1- به جای postOnly در تابع filters چه باید نوشت که فقط از راه get فرستاده شود؟
2- به جای نام مدل در کنترلر ، در موارد زیر چه باید نوشت؟

$_GET['نام مدل']
3- آن گزینه هایی از فرم که وارد کردن داده در آن ها الزامی است را چگونه باید در متد get هم الزامی نگه داشت؟
4- خواهش می کنم هر چیز دیگری که نیاز است و من اشاره نکردم را بفرمائید.
با سپاس فراوان.

mahdi_1986
پنج شنبه 10 بهمن 1392, 12:42 عصر
تو فرمت تعریف کن GET



<?php $form=$this->beginWidget('CActiveForm', array(
'action'=>Yii::app()->createUrl($this->route),
'method'=>'get',
'htmlOptions'=>array('class'=>'well'),
)); ?>

mahdirabbani
پنج شنبه 10 بهمن 1392, 12:57 عصر
سپاس از شما.
راستش من مبتدی هستم.
1- می شه لطفا یه توضیحی در مورد 'htmlOptions'=>array('class'=>'well') بدین؟!
2- توی کنترلر یا مدل کاری نباید انجام بدم؟

Emir New
پنج شنبه 10 بهمن 1392, 13:09 عصر
سلام
منظور از این خط


'htmlOptions'=>array('class'=>'well')

رو به عنوان مثال میاد و برای شما این کد رو تولید می کنه



<a href="index.php" class='well'></a>


پیشنهاد می کنم پکیج اموزشی استاد شهرکی رو بگیرید و گوش بدید

mahdirabbani
پنج شنبه 10 بهمن 1392, 13:14 عصر
پکیج رو کامل دیدم ولی در مورد get اصلا صحبتی نشده.

MMSHFE
جمعه 11 بهمن 1392, 02:26 صبح
سلام دوستان
می خواستم بدونم چگونه می شه داده هامون را در اکشن create یا هر اکشن دیگه ، به جای این که با متد post بفرستیم ، با get بفرستیم. به گونه ای که دیگه نشه با post فرستاد.
برای نمونه:
1- به جای postOnly در تابع filters چه باید نوشت که فقط از راه get فرستاده شود؟
2- به جای نام مدل در کنترلر ، در موارد زیر چه باید نوشت؟

$_GET['نام مدل']
3- آن گزینه هایی از فرم که وارد کردن داده در آن ها الزامی است را چگونه باید در متد get هم الزامی نگه داشت؟
4- خواهش می کنم هر چیز دیگری که نیاز است و من اشاره نکردم را بفرمائید.
با سپاس فراوان.
1- یک فیلتر به اسم filterGetOnly تعریف کنید با کد زیر:


public function filterGetOnly($filterChain)
{
if(Yii::app()->request->requestType != 'GET')
{
throw new CHttpException(400,Yii::t('yii','Your request is invalid.'));
}
$filterChain->run();
}

و توی متد ()filters اینطوری بنویسید:


...
'getOnly + delete',
...

2- از اونجا که طول URL محدوده، بهتره مقادیر Get رو بصورت آرایه در نیارین چون اسمشون طولانی میشه و فقط از همون ['GET['id_$ و... استفاده کنید. البته اگه برای اکشن خودتون پارامتر id$ تعریف کنید، خود Yii مقدار ['GET['id_$ رو داخلش میگذاره. به همین شکل پارامتر name$ معادل ['GET['name_$ میشه:

public function actionDelete($id) { ... }
3- اگه اسامی رو بصورت آرایه بگذارین، میتونید اینطوری عمل کنید:

$model->attributes = $_GET['User'];
و اینجا، Validation Rule هایی که تعریف کردین توی مدل، بطور خودکار وارد عمل میشن و براشون فرقی نداره که با روش Get ارسال شده باشه یا Post. اونها فقط آرایه رو میگیرن و چک میکنن. اما چون توی مورد 2 گفتم بهتره اسامی معمولی بگذارین و آرایه نکنید، درنتیجه نمیشه از مقداردهی یکجا استفاده کرد و باید یکی یکی ست کنید:


$model->username = $_GET['username'];
$model->email = $_GET['email'];
...

اما اگه اندیسهای آرایه GET_$ رو با اسامی فیلدهای مدل یکسان درنظر بگیرین، میتونید اینطوری هم بنویسید:

$model->attributes = $_GET;
4- چیز دیگری نیاز نیست. اگه جایی ابهامی بود، بفرمایید تا بیشتر توضیح بدم. اینجور وقتها نگاه به سورس کد Yii یا ترجیحاً برای راحتی بیشتر، فایل yii/framework/yiilite.php به شما کمک میکنه که ببینید فیلترهای خود Yii چطور نوشته شدن و درصورت تمایل فیلتر شخصی خودتون رو مشابه با ساختار اونها، به کنترلر موردنظر خودتون (یا اگه برای همه کنترلرها نیاز دارین، به protected/components/Controller.php) اضافه کنید.

mahdirabbani
جمعه 11 بهمن 1392, 11:59 صبح
من نمی دونم چه گونه از شما سپاسگزاری کنم. خیلی لطف کردید آقای شهرکی