2017-07-18 26 views
0

Ich habe eine roles Tabelle. Sieht wie folgt aus:CakePHP 3 Eintrag erstellen, benutzerdefiniertes primäres Feld festlegen

CREATE TABLE `roles` (
    `role` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 
    `permissions` longtext COLLATE utf8_unicode_ci 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
ALTER TABLE `roles` 
    ADD PRIMARY KEY (`role`), 
    ADD UNIQUE KEY `role` (`role`); 

Jetzt Kuchen wird nicht als „normal“ Feld zu erkennen, so dass es geben keine Eingabefeld.

Ich reparierte meiner Meinung nach mit diesem:

// src/Template/Admin/Roles/add.ctp 

echo $this->Form->control('name', ['class' => 'form-control']); 

Und nun die Abhilfe in meinem Controller:

// src/Controller/Admin/RolesController.ctp 

$roleData = $this->request->getData(); 
$roleData['role'] = strtolower($roleData['name']); 
unset($roleData['name']); 

$role = $this->Roles->patchEntity($role, $roleData); 
if ($this->Roles->save($role)) { 
    $this->Flash->success(__('The role has been saved.')); 
} 

Es speichert die Eingabe, sondern füllt nicht alles in der Datenbank Zeile nach oben role . Fehle ich etwas?

+0

überprüfen Sie die 'RoleEntity'-Datei im Entity-Ordner, ist es zugänglich! –

+0

Was tun Sie, wenn Sie eine Rolle umbenennen müssen? Und wie würdest du das machen, wenn es ausländische Schlüsselzwänge gibt? Außerdem müssen Primärschlüssel per Definition eindeutig sein. – ndm

Antwort

1

Wenn Sie patchEntity verwenden, können Sie keine nicht zuweisbaren Felder zuweisen und Ihr Primärschlüssel ist mehr als wahrscheinlich kein zuweisbarer Schlüssel. Sie können es in der Entity ändern, die es dem Formular ermöglichen soll, anzuzeigen, dass die Patch-Entität korrekt funktionieren kann.

namespace App\Model\Entity; 

use Cake\ORM\Entity; 

class Role extends Entity 
{ 
    protected $_accessible = [ 
     'role' => true, 
     'permissions' => true, 
     '*' => false, 
    ]; 
} 

https://book.cakephp.org/3.0/en/orm/saving-data.html#changing-accessible-fields

https://book.cakephp.org/3.0/en/orm/entities.html#mass-assignment

+1

Beim ersten Versuch hat es nicht funktioniert. Dann habe ich das Modell, den Controller und die Ansichten erneut hochgeladen. Jetzt funktioniert es. Vielen Dank :) –

0

In RolesTable.php sollte es so etwas wie dieses:

public function initialize(array $config) 
{ 
    parent::initialize($config); 
    $this->setTable('roles'); 
    $this->setPrimaryKey('role'); 
} 

so würde CakePHP 'role' als PrimaryKey verwenden.