Spędziłem sporo czasu próbując rozwiązać ten problem i nie miałem szczęścia. Próbowałem routingu bez powodzenia. Najpierw umieszczę logikę, potem kod.

  1. Użytkownicy są w /pra/Fields/view/1 i patrzą na listę pól, gdzie fields.template_id=1
  2. Użytkownicy klikają dodaj nowe pole /pra/Fields/add_new/1 zostają przeniesieni do formularza, w którym wprowadzają informacje, które chcą o nowym polu, które tworzą.
  3. gdy użytkownik kliknie przycisk dodaj/prześlij, nowe pole jest zapisywane w bazie danych
  4. Użytkownik zostaje przeniesiony z powrotem do /pra/Fields/view/1, aby mógł zobaczyć nowe pole dodane do szablonu

Obecnie trwają pierwsze 3 kroki, jednak jeśli chodzi o przekierowanie z powrotem do /pra/Fields/view/1 Użytkownik jest przekierowywany do /pra/Fields/view/

Oto kod funkcji add_new

function add_new($id=null){
    //allows users to add another field to an existing template
    $this->set('title_for_layout', 'Create Fields');
    $this->set('stylesheet_used', 'homestyle');
    $this->set('image_used', 'eBOXLogoHome.png');
    $this->layout='home_layout';
    $name=$this->Field->field('template_id', array('template_id'=>$id));
    //if the field data saves
    $this->set('name',$name);
    if(($this->Field->save($this->data)))
    {   
        //user is redirected to fields/view/$name
        $this->redirect(array('controller'=>'Fields', 'action'=>'view',$name));
    }
    //sets the $id variable
    $this->set('id',$id);

Oto widok add_new

<table id="formatform">
        </br></br>
        <?php
            $options = array('Money'=>'Money','Text'=>'Text','Description'=>'Description');
            ?>
        <?php echo $this->Form->create('Field', array('action'=>'add_new')); ?>
        <?php echo $this->Form->input('id',array('type'=>'hidden')); ?>
                <tr>
                <td></td>
                <td><?php echo $this->Form->input('template_id',array('type'=>'hidden','default' => $id)); ?></td>
                </tr>

                <tr>
                <td align='center'>Field Name:</td>
                <td align='left'><?php echo $this->Form->input('name', array('label'=>false)); ?></td>
                </tr>

                <tr>
                <td align='center'>Default Value:</td>
                <td align='left'><?php echo $this->Form->input('default_value', array('label'=>false)); ?></td>
                </tr>
                <tr>
                <td align='center'>Field Type:</td>
                <td align='left'><?php echo $this->Form->input('field_type', array('label'=>false,'type'=>'select','options'=>$options)); ?></td>
                </tr>

                <tr>
                <td align='center'>Description:</td>
                <td align='left'><?php echo $this->Form->input('description', array('label'=>false)); ?></td>
                <td><?php echo $this->Form->input('active', array('type'=>'hidden','default'=>true)); ?></td>
                </tr>




    <td></td>   <td align = "left"><?php echo $this->Form->end('Submit');?></td>

A oto kod funkcji widoku!

function view($name){
    //lists information about fields that correspond to the
    //template they have clicked 'view' on
    $this->set('title_for_layout', 'Field Details');
    $this->set('stylesheet_used', 'homestyle');
    $this->set('image_used', 'eBOXLogoHome.png');
    $this->layout='home_layout';
    //sets $conditions where template_id=$name and field.active=true
    $conditions=array(
        "AND"=>array(
        'template_id'=> $name,
        'Field.active'=>true));
    //finds all fields where 'conditions'=$conditions
    $fields = $this->Template->Field->find('all',array( 
        'conditions' => $conditions));
    //sets all the variables      
    $this->set('conditions', $conditions);
    $this->set('field', $fields);
    $this->set('field', $this->paginate('Field', $conditions));  


}
1
user1393064 25 wrzesień 2012, 13:31

2 odpowiedzi

Najlepsza odpowiedź

Może się zdarzyć, że masz tutaj problem:

function add_new($id=null){
    //allows users to add another field to an existing template
    $this->set('title_for_layout', 'Create Fields');
    $this->set('stylesheet_used', 'homestyle');
    $this->set('image_used', 'eBOXLogoHome.png');
    $this->layout='home_layout';

Sprawdź, czy $name nie jest puste

$name = $this->Field->field('template_id', array('template_id'=>$id)); 
if(!empty($name)){
    $this->set('name',$name);
    if(($this->Field->save($this->data)))
    {   
        //user is redirected to fields/view/$name
        $this->redirect(array('controller'=>'Fields', 'action'=>'view',$name));
    }
}

Reszta twojego kodu

//sets the $id variable
$this->set('id',$id);
0
Herr Nentu' 25 wrzesień 2012, 18:30
function add_new($id=null){
    //allows users to add another field to an existing template
    $this->set('title_for_layout', 'Create Fields');
    $this->set('stylesheet_used', 'homestyle');
    $this->set('image_used', 'eBOXLogoHome.png');
    $this->layout='home_layout';
    $this->set('id',$id);

    if(($this->Field->save($this->data)))
    {

    $id = $this->data['Field']['template_id'];

    $this->set('id',$id);
    $this->redirect(array('controller'=>'Fields', 'action'=>'view',$id));

    }
    }
0
user1393064 26 wrzesień 2012, 05:41