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:
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:
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!
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem hat wahrscheinlich zu tun mit der Art von Form-element hier verwendet; ich würde vorschlagen, zu versuchen, etwas ähnliches in Ihrem
/View/Users/edit_user.ctp
Datei:Mehr Informationen über das speichern von änderungen finden Sie in der CakePHP tutorial blog.
InformationsquelleAutor summea
Brauchen Sie nicht, um echo die Werte in der form, CakePHP ist klüger als die. Tun Sie dies:
Und dann ein Formular erstellen, in Ihrem Blick als solche:
CakePHP automatisch füllen Sie die Formularfelder mit Werten basierend auf dem, was in
$this->request->data
.Den Blog-Tutorial auf das CakePHP-cookbook ist ein guter Ausgangspunkt für die Auseinandersetzung mit den Rahmenbedingungen und Konzepte.
InformationsquelleAutor Martin Bean