Aktualisieren eines Datensatzes in CakePHP

So, ich bin zu lernen, CakePHP, und ich bin versucht zu bauen, eine Reihe von grundlegenden Anwendungen, die ich bauen kann in gerade PHP zu lernen, wie CakePHP funktioniert. Jetzt arbeite ich auf einem basic-Order-Management-System-Anwender können mehrere Aufträge und Bestellungen, die ein Benutzer gehören.

Habe ich die Datenbank eingerichtet und CakePHP korrekt konfiguriert ist (die Start-Seite zeigt alle grün-für jedes Thema wie die Standard-Zeitzone-und Datenbank-Verbindung, mit Ausnahme der DebugKit die ich nicht installiert). Ich habe auch eine "Liste der Benutzer", Seite:

Aktualisieren eines Datensatzes in CakePHP

Das problem, ich bin mit hinein, so können Sie tatsächlich sehen Sie im obigen screenshot sehen kann, ist, wenn ich versuche einen vorhandenen Benutzer Bearbeiten auf /users/edit_user:

Aktualisieren eines Datensatzes in CakePHP

Ich versuche zu speichern, werden die änderungen für den Benutzer, und ich (1) verwenden Sie $this->Form->hidden(...) für die ID und (2) setzen Sie den Primärschlüssel der Primärschlüssel der Tabelle in das Modell mit public $primaryKey = 'ID';

Jedes mal, wenn ich versuche, dies zu tun, es fügt einfach nur ein neue Datensatz statt die Aktualisierung der bestehenden Datensatz, und ich dachte das problem wäre behoben, durch die Identifizierung von meiner PK und durch hinzufügen der ID vorgelegt werden, aber ich muss etwas fehlen.

Hier ist der code für die beteiligten Seiten:

Modell

<?php
/**
 * app/Model/User.php
 *
 */
class User extends AppModel
{
    public $name = 'User';
    public $primaryKey = 'ID';

    //<hasMany>
    public $hasMany = array(
                            'Order' => array('dependent' => true)
                        );
}

?>

Controller

<?php
/**
 * app/Controller/UsersController.php
 *
 */
class UsersController extends AppController
{
    //public $scaffold;

    /* Validation */
    public $validate = array(
            'username' => array(
                    'required' => true,
                    'allowEmpty' => false,
                    'loginRule1' => array(
                        'rule' => 'alphaNumeric',
                        'message' => "Usernames must be alphanumeric!"
                                        ),
                    'loginRule2' => array(
                        'rule' => array('minLength', 4),
                        'message' => 'Usernames must be at least 4 characters.'
                                        ),
                                ),
            'password' => array(
                    'required' => true,
                    'allowEmpty' => false,
                    'passwordRule1' => array(
                        'rule' => array('minLength', 4),
                        'message' => 'Passwords must be between 4 and 8 characters.'
                                            ),
                    'passwordRule2' => array(
                        'rule' => array('maxLength', 8),
                        'message' => 'Passwords must be between 4 and 8 characters.'
                                            )
                                )
            );


    /* Actions */

    public function index()
    {
        //Grab all users
        $users = $this->User->find('all');

        //Set/Send users to View
        $this->set('users', $users);
    }

    public function new_user()
    {
        /* Has any Form data been POST'd? */
        if ($this->request->is('post'))
        {
            //Save User data to the DB
            $this->User->save($this->request->data);

            $this->redirect('/users');
        }
    }

    /*
        Accessing Args:
            (1) Direct URL Routing Method
                --> ...
            (2) Named Params Method
                --> CakeRequest['named']['[name]']
    */
    public function edit_user($id = null)
    {
        $id = $this->request['named']['currentID'];

        //Display the current data of the user
        if (!empty($id))
        {
            $userInfo = $this->User->find('all', 
                    array('conditions' => array('User.ID' => $id)));

            $this->set('userData', $userInfo);
        }
        else
            $this->set('error', '$id is empty!');

        /* Has any Form data been POST'd? */
        if ($this->request->is('post'))
        {
            //Save User data to the DB
            $this->User->save($this->request->data);

            $this->redirect('/users');
        }
    }
}

?>

View/Users/edit_user.ctp

<div class="row-fluid">

    <div class-"span12"></div>
    <div class="span12"></div>

    <div class="span8 offset2">

        <?php
            echo "Hidden ID Field Value: " . $userData[0]['User']['ID'];
            echo "<hr>";



            echo $this->Form->create('User');
            echo $this->Form->input('username');
                echo "  Current Name: " . 
                    $userData[0]['User']['username'];
            echo $this->Form->input('password');
                echo "  Current password: " . 
                    $userData[0]['User']['password'];

            //Hidden ID field to make save ~ an UDATE
            echo $this->Form->hidden('User', 
                    array('ID' => $userData[0]['User']['ID'],
                            'type' => 'hidden'));

            echo $this->Form->end('Save');

        ?>
    </div>

</div>

Erkennt jemand, was ich nicht mache, lassen Sie mich Bearbeiten /UPDATE einer vorhandenen Datensatz anstelle von EINFÜGEN einer neuen Marke ein?
Vielen Dank für Ihre Zeit!

Nicht sicher, ob es würde einen Unterschied machen... aber wenn ich eine ID Eingabefeld für so etwas, ich Neige dazu, verwenden Sie so etwas wie dieses: echo $this->Form->input('id', array('type' => 'hidden'));
Das war es! Danke für die Korrektur meiner n00b-Fehler. 🙂

InformationsquelleAutor Mister R2 | 2013-03-19

Schreibe einen Kommentar