Передача по ссылке post параметров на сервер в yii2.
  • 2337

Создание POST ссылки в yii2.

Автор: admin | 03 июля (Вт.) 2018г. в 22ч.48м.

Метод POST по ссылки в yii2.

Очень часто нужно передать POST по ссылке. Например, нужно сделать ссылку на какую-нибудь часть сайта как профиль пользователя или админчасть. Может быть нужно обратиться к экшену delete какого-нибуть контроллера по ссылке, без использования форм.

Отправляем POST по ссылке:
<?= Html::a('submit', Url::to(['site/delete', 'id' => $id]), ['data-method' => 'POST']) ?>​
В экшене контроллера:
class SiteController extends Controller{
	
	public function behaviors()
	{
		return [
			'verbs' => [
				'class' => VerbFilter::className(),
				'actions' => [
					'delete' => ['post'],
				],
			],
		];
	}


	public function actionDelete($id){
		$article = Article::findOne($id);
		$article->delete();
		return $this->redirect(['index']);
	}
}​

В данном случае мы передаем id в адресе ссылки и удаляем материал.

Передача параметров через POST по ссылке.

Передадим параметры методом POST через data атрибут:
<?= Html::a('Text', 
['site/delete', 'id' => $id], [
	'data-method' => 'POST',
	'data-params' => [
	    'csrf_param' => \Yii::$app->request->csrfParam,
	    'csrf_token' => \Yii::$app->request->csrfToken,
	],
]) ?>​

Таким образом кроме переменной в url мы можем передать любые параметры методом post. В данном примере мы передали csrf_token, хотя намного полезнее передавать csrf_token при запросах по ajax, но это тема для отдельной статьи...

В контроллере принимаем параметры, переданные POST методом через data атрибуты привычным способом:

if(Yii::$app->request->isPost){
	$csrf_param = Yii::$app->request->post('csrf_param');
}

Заключение.

Итак, в yii2 можно кликнув на ссылку передать параметры на сервер методом POST. Эта возможнасть есть благодаря обработке  атрибута data-method с помощью javascript, который подключается в yii\web\YiiAsset и в частности в yii.js.

Однако, данный метод нужно использовать с осторожностью, так как поисковые боты переходят по ссылкам методом get и соответственно в таком случает они отсеиваются при проверке в экшене с вылетом ошибки 403 Forbidden. Далее все это сыпется в лог файлы и их размеры ростут. Поэтому, все таки лучше использовать такие ссылки где-нибудь в закрытой части сайта.

Приветствую!

Меня зовут Сергей. Я - автор этого блога.

Если Вам был полезен материал на моем сайте, поддержите пожалуйста мой проект, чтобы о нем узнали другие люди - кликните plizz :) на иконку в соц. сети, чтобы поделиться материалом с другими.