Вызов метода из контроллера (yii2) с помощью JS

211
21 мая 2018, 04:40

возник вопрос как правильно провернуть вызов функции контроллера со страницы с помощью js.

Код самой страницы:

<?php 
 
use yii\helpers\ArrayHelper; 
use yii\helpers\Url; 
use yii\helpers\Html; 
use yii\widgets\Pjax; 
 
const BASE_URL = "/education/dialogs/add-result-general-test"; 
 
$form = \yii\widgets\ActiveForm::begin( 
 
    ['action' => [BASE_URL . '/apply'], 
        'method' => 'post', 
        'id' => 'frm00', 
        'enableAjaxValidation' => true, 
        'validationUrl' => Url::toRoute(BASE_URL . '/validation') 
    ]); 
$checkPath = Url::toRoute(BASE_URL . '/check'); 
Html::beginForm([BASE_URL . '/check'], 'post',['data-pjax' => '']); 
echo $form->field($test, 'test_id')->dropDownList(ArrayHelper::map(\app\modules\education\models\GeneralTest::find()->all(), 'id', 'name'),[ 
    'prompt' => 'Выберите тест', 
    'class' => 'form-control', 
    'onchange'=> "location.href = '. $checkPath . '", 
    'name' => 'test_id' 
]); 
Html::endForm(); 
 
\yii\widgets\ActiveForm::end(); 
?> 
 
<div class="alert alert-success" style="display: none"></div> 
<div class="alert alert-error" style="display: none"></div>

Код контроллера:

<?php 
 
namespace app\modules\education\controllers\dialogs; 
 
use app\common\BaseController; 
use app\modules\education\models\GeneralTestHistory; 
use yii\bootstrap\ActiveForm; 
use Yii; 
use yii\web\Response; 
 
class AddResultGeneralTestController extends BaseController 
{ 
    public function actionIndex() 
    { 
        $assignGeneralTest = new GeneralTestHistory(); 
        $group = (int)Yii::$app->request->post('id'); 
        $contactsGroup = $assignGeneralTest->searchContactGroup($group); 
 
        return $this->renderAjax('add-result-general-test', ['test' => $assignGeneralTest,'group' => $group, 'contactsGroup' => $contactsGroup]); 
    } 
 
    public function actionCheck(){ 
 
        return 'wewe'; 
 
    } 
 
    public function actionValidation() 
    { 
        $test = new GeneralTestHistory(); 
        if (Yii::$app->request->isAjax && $test->load(Yii::$app->request->post())){ 
            Yii::$app->response->format = 'json'; 
            return ActiveForm::validate($test); 
        } 
    } 
 
    public function actionApply() 
    { 
         
            if(count($arrPost) == $resultSave){ 
                return ['result' => 'ok', 'message' => "Тест успешно добавлен."]; 
            } else { 
                return ['result' => 'error', 'message' => "Произошла ошибка добавления теста."]; 
            } 
        } 
    } 
}

Код страницы, где вызывается диалог. окно:

<?php 
 
use yii\grid\GridView; 
use app\common\widgets\Dialog; 
use app\common\widgets\DialogButton; 
use yii\helpers\Html; 
use yii\helpers\Url; 
use yii\widgets\Pjax; 
 
const DIALOG_ADD_RESULT_GENERAL_TEST = 'add-result-general-test'; 
 
 
        echo DialogButton::widget(['title' => 'Добавить групповой тест', 'id' => DIALOG_ADD_RESULT_GENERAL_TEST]); 
 
        echo Dialog::widget([ 
            'id' => 'dialog-' . DIALOG_ADD_RESULT_GENERAL_TEST, 
            'title' => 'Добавить групповой тест', 
            'subscribe' => DIALOG_ADD_RESULT_GENERAL_TEST, 
            'renderPath' => Url::to(['/education/dialogs/add-result-general-test']), 
            'renderParams' => [ 
                'id' => $model->id 
 
            ], 
            'buttons' => [ 
                DialogButton::widget(['title' => 'Создать', 'id' => DIALOG_ADD_RESULT_GENERAL_TEST . '-apply', 
                    'successFunction' => new \yii\web\JsExpression('function() { $.pjax.reload(\'#test-zone\' , {timeout : false}); }') 
                ]) 
            ] 
        ]);

Как правильно повесить событие на 'onchange' чтобы вызвалась функция actionCheck() из контроллера?

заранее спасибо. Убрал часть кода, чтобы было понятней.

Answer 1

Отправить запрос на controller/check с помощью ajax, получить данные и обработать по усмотрению.

READ ALSO
Не работает get_cart_subtotal() в сайдбаре

Не работает get_cart_subtotal() в сайдбаре

На сайте есть сайдбар для вывода кнопки "Корзина"Я добавил в код вывод

179
Открытые запросы VK api с требованием токена

Открытые запросы VK api с требованием токена

Друзья! Я не особо опытный разработчик, в php так вообще мало что соображаю, а после нововведений VK api получить фотки с альбомов ВК для вывода...

179
Можно ли закрыть модальное окно при нажатии на крестик в input search?

Можно ли закрыть модальное окно при нажатии на крестик в input search?

В моем проекте есть <input type="search"> в который я ввожу информациюКогда я ввожу запрос в поле поиска появляется модальное окно с вариантами...

205