Reutilizar formularios en CakePhp 2.9.8

51 views
Skip to first unread message

detectivejd

unread,
May 21, 2017, 11:48:07 PM5/21/17
to CakePHP en Español
Hola a todos, me volví a animar a usar CakePhp, y quería preguntar lo siguiente: ¿Es posible crear hacer que los formularios sean reutilizables?

(los ejemplos son códigos viejos de cake que tengo)

Ejemplo add.ctp:

<div class="container">
    <div class="row">
        <div class="col-md-6">
            <?php echo $this->Form->create('Role', array('novalidate' => 'novalidate')); ?>
                <fieldset>
                    <legend>Crear Rol</legend>
                    <?php 
                        echo $this->Form->input('nombre', array('class' => 'form-control', 'label' => 'Nombre del Rol:'));
                    ?>
                </fieldset>
                <br />
            <?php 
                echo $this->Form->end(array('label' => 'Aceptar', 'class' =>'btn btn-success')); 
            ?>
            <br />
            <?php echo $this->Html->link("Cancelar", array('action'=>'index'),array('class' =>'btn btn-success')); ?>
        </div>        
    </div>

edit.ctp:

<div class="container">
    <div class="row">
        <div class="col-md-6">
            <?php echo $this->Form->create('Role', array('novalidate' => 'novalidate')); ?>
                <fieldset>
                    <legend>Editar Rol</legend>
                    <?php 
                        echo $this->Form->input('id', array('type' => 'hidden'));
                        echo $this->Form->input('nombre', array('class' => 'form-control', 'label' => 'Nombre del Rol:'));
                    ?>
                </fieldset>
                <br />
            <?php 
                echo $this->Form->end(array('label' => 'Aceptar', 'class' =>'btn btn-success')); 
            ?>
            <br />
            <?php echo $this->Html->link("Cancelar", array('action'=>'index'),array('class' =>'btn btn-success')); ?>
        </div>        
    </div>
</div>

Puedo crear una clase o archivo tipo: TipoForm.php en el que le pongo las cajas de texto y todo en uno sólo y luego llamarlos en el controllador TiposController???

Espero sus respuestas y saludos.
 

detectivejd

unread,
May 22, 2017, 11:38:17 PM5/22/17
to CakePHP en Español
Esto es lo que pretendo hacer:

<?php
/**
 * CakePHP TipoForm
 * @author detectivejd
 */
class TipoForm extends FormHelper 
{
    // en este constructor llamo a la función prepare que lo que hace es crear el formulario    
    function __construct() {
        $this->prepare();
    }
    //creo el formulario y todo, les pregunto es: ¿debería guardarlo en un array para que en show muestre el formulario creado? 
    private function prepare(){
        $this->create("Tipo", ['novalidate' => 'novalidate']);
        $this->input("des");
        $this->end();
    }
    // aquí mostraría el formulario creado, pero me faltan de cómo encarar esto
    public function show(){
        
    }
}

Espero sus respuestas señores, ya que me servirán mucho para hacer este código.

Saludos.

Juandy Ocampo

unread,
May 23, 2017, 12:37:53 AM5/23/17
to cakep...@googlegroups.com
Hice este cambio:

<?php
/**
 * CakePHP TipoForm
 * @author detectivejd
 */
App::uses('FormHelper', 'View/Helper');
class TipoFormHelper extends FormHelper 
{
    private $form;
    function __construct() {
        $this->form = [];
        $this->prepare();
    }
    private function prepare(){
        array_push($form, $this->create("Tipo", ['novalidate' => 'novalidate']));
        array_push($form, $this->input("des"));
        array_push($form, $this->end());
    }
    public function show(){
        for($i = 0 ; $i < count($form); $i++){
            echo $form[$i];
        }
    }
}

Me da este error:

Call to a member function here() on null

en la línea que puse en rojo.

¿Cómo podré solucionar esto? espero sus respuestas y saludos.
Reply all
Reply to author
Forward
0 new messages