cakePHP Передача значений обратно в исходное представление после сбоя сохранения

Я работаю над проектом CakePHP от предыдущего разработчика, я впервые делаю что-либо на cakePHP. Это то, с чем я борюсь, я пытаюсь установить представление добавления, которое требует заполнения многих полей данными. После «сохранения» данных в представлении он должен позволить вам сохранить, если нет некоторых отсутствующих полей (из-за вставки sql). Что я застрял, так это то, что я пытаюсь перенаправить обратно на ту же страницу (после ошибки) и передать предыдущие данные, которые были введены, обратно в представление добавления.

Другая моя проблема заключается в том, что если после перенаправления на add/0 это не сработает, оно просто перейдет к add/, что выдает мне ошибки, если я не обрабатываю нулевое значение.

Это часть моего кода.

PresupuestosController.php
     function add( $cliente_id = 0 )
        {
          .... some code
   if ( $this->request->is( 'post' ) ) {
       $request = $this->request->data;
      ... some more code

      if ( $this->Presupuesto->save( $presupuesto ) ) {
           //here i'm getting most of my errors where PresupuestoDetalle is not 'defined' so I get errors of missing fields.


           foreach ( $request['PresupuestoDetalle'] as $articulo ) {
                            $presupuesto_detalle = $this->PresupuestoDetalle->create();
                            $presupuesto_detalle['presupuesto_id'] = $this->Presupuesto->getInsertID();
                            $presupuesto_detalle['articulo_id'] = $articulo['articulo_id'];
                            $presupuesto_detalle['cantidad'] = $articulo['cantidad'];
                            $presupuesto_detalle['monto'] = $articulo['monto'];
                            $presupuesto_detalle['descuento'] = $articulo['descuento'];
                            $presupuesto_detalle['familia_id'] = $this->Articulo->field( 'familias_id', array( 'id' => $articulo['articulo_id'] ) );
                            $presupuesto_detalle['categoria_id'] = $this->Familia->field( 'categoria_id', array( 'id' => $presupuesto_detalle['familia_id'] ) );

                            $detalle_guardado = $this->PresupuestoDetalle->save( $presupuesto_detalle );

                }                    
}else{
                                            $detalle_guardado = false;
                                        }
                        if ( $detalle_guardado ) {
                            $this->Session->setFlash( 'El presupuesto se creó satisfactoriamente.', 'messages/green' );
                                                    echo json_encode($this->Session); die();    
                            if ( $cliente_id != '0' ) {
                                $this->redirect( '/Presupuestos/edit/' . $cliente_id . '#tab_presupuestos' );
                            }
                            else {
                                $this->redirect( '/Presupuestos/index' );
                            }
                        }
                        else {
                            $this->Session->setFlash( 'No se pudo guardar el detalle del presupuesto. Por favor revise los datos.', 'messages/red');
                                                    $this->redirect( '/Presupuestos/add/0'  );
                        }
                    }
                    else {
                        $this->Session->setFlash('No se pudo guardar el presupuesto. Por favor revise los datos.', 'messages/red');
                                            $this->redirect( '/Presupuestos/add/0'  );                                        
                                    }
                }
                else {
                    $this->Session->setFlash('No se pudo guardar la información de relevamiento. Por favor revise los datos.', 'messages/red');
                                    $this->redirect( '/Presupuestos/add/0' );                                
                            }
    }

Но я определяю PresupuestoDetalle. Это то, что я использую для создания ввода, поэтому я думаю, что он должен передаваться контроллеру как PresupuestoDetalle...

<?php 
            echo $this->Form->input( 'PresupuestoDetalle.' . $detalle['index'] . '.cantidad',
                    array( 
                        'label' => false,
                        'div' => 'input text',
                        'class' => 'easyui-numberbox cantidad',
                        'data-options' => $numberbox_dataoptions,
                        'type' => 'text',
                        'style' => 'width: 60px;',
                        'value' => isset( $detalle['valor'] ) ? $detalle['valor']['cantidad'] : ''
                    )); 
            ?>

person Diego Romero    schedule 11.10.2013    source источник
comment
В чем именно заключается ваш вопрос?   -  person tereško    schedule 11.10.2013
comment
я тоже ничего не знаю о cakephp... однако я бы подумал об использовании $_SESSION здесь. если вы перенаправляете это другой запрос, поэтому вы теряете состояние. не забудьте удалить «ненужные» данные в $_SESSION   -  person gwillie    schedule 11.10.2013
comment
Так что я должен просто написать это в сеансе?   -  person Diego Romero    schedule 11.10.2013


Ответы (1)


Пользователь

$this->redirect($this->referer());

он перенаправляет на предыдущую страницу

person Yogesh Saroya    schedule 11.10.2013