2013-09-29 3 views
0

У меня возникла проблема с вызовом действия в контроллере при нажатии кнопки. Таким образом, контроллер генерируется Gii. Все его действия являются те, по умолчанию, генерируемые Gii, для actionCreate().Проблемы, вызывающие действия контроллера на кнопке Нажмите

кроме Вот соответствующий код ::

class ProductsController extends Controller { 
public function actionCreate() { 
     $model = new Products; 



     if (isset($_POST['params'])) { 
     // $model->attributes = $_POST['Products']; 
     //if ($model->save()) 
     // $this->redirect(array('view', 'id' => $model->id)); 
     echo 'Yes Working'; 
    } 

    $this->render('create', array(
     'model' => $model, 
    )); 
} 

Как его видно из приведенного выше фрагмента кода это действие вызывающей представление с именем создать .php. Вот create.php ::

<div class="page"> 
<div class="container"> 
    <div class="row"> 
    <h2>Create Products</h2> 

    <?php echo $this->renderPartial('_form', array('model' => $model)); ?> 
    </div> 
</div> 

А вот частично оказывается формой.

<?php 
$form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'id' => 'products-form', 
    'action' => Yii::app()->createUrl('products/create'), 
    'enableAjaxValidation' => false, 
     )); 
?> 

<div class="form-actions"> 
    <?php 
    echo CHtml::submitButton('Create', array(
     'submit' => 'EasyAesthetics/index.php/products/create', 
     'params' => '1' 
    )); 
    ?> 
</div> 

<?php $this->endWidget(); ?> 

Теперь то, что я хочу, чтобы при нажатии на кнопку «Создать», это будет вызывать метод actionCreate() в ProductsController. Сейчас кнопка работает, и меня перенаправляют на /demoProject/index.php/products/create, но эхо «Yes Working» не отображается.

Может кто-нибудь, пожалуйста, покажите мне, как этого достичь. Как я могу снова вызвать действие create только с помощью кнопки и всего лишь 1 в массиве $_POST.

Мне нужно сделать это, чтобы при нажатии кнопки создать метод actionCreate() вызовет соответствующие компоненты для создания необходимых продуктов.

ответ

0

Посмотрите на код, сгенерированный вашей формой. Если у вас есть модель под названием «Hello» с полем под названием «Мир», ваша форма поле будет

<input type="text" name="Hello[world]"> 

Попробуйте изменить свои действия таким образом:

class ProductsController extends Controller { 
    public function actionCreate() { 
     $model = new Products; 
     if (isset($_POST['Products'])) { 
      echo 'Yes Working'; 
     } 
     $this->render('create', array(
      'model' => $model, 
     )); 
    } 
} 

Обратите особое внимание на эти два линии:

 $model = new Products; 
     if (isset($_POST['Products'])) { 

Поля будут иметь одинаковое название модели. В случае большего количества моделей:

<input type="text" name="Model1[field1]"> 
<input type="text" name="Model1[field2]"> 
<input type="text" name="Model21[field2]"> 
<input type="text" name="Model2[field2]"> 

и так далее ...

+0

Большое спасибо вам ответить. Теперь работает. Как-то я подумал, что массив POST будет индексироваться с использованием «params» в качестве ключа, как в ассоциативном массиве. В любом случае, я был неправ. Спасибо, снова за это. Я очень ценю это. – Maxx

1

, если ваш "var_dump()" эд свой "$ _POST", вы увидите sensorario ответ.

, а также вы можете установить способ отправки своих сообщений, если вы еще не отправили сообщение.

$form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'id' => 'products-form', 
    'action' => Yii::app()->createUrl('products/create'), 
    'enableAjaxValidation' => false, 
    'method' => 'post', 
)); 

>

или получить параметр как это (это устанавливает на $ _REQUEST):

$param = Yii::app()->request->getParam('Products' , null); 
+0

Спасибо за ответ. Я сделал это ранее, но данные не отправляются. Проверка того, установлен ли массив POST, не становится правдой. – Maxx

+0

Ваша кнопка отправки может быть проблемой, изменить ее тип или что-то в этом роде. – tinybyte

+0

Фактически он работает сейчас. echo CHtml :: submitButton ('Create', array ( 'submit' => 'EasyAesthetics/index.php/products/GetData', 'params' => '1' )); – Maxx

Смежные вопросы