Wie erstelle ich programmgesteuert eine Rolle?

10

Wie erstelle ich programmgesteuert eine Rolle?

Was mache ich hier falsch?

$role = \Drupal\user\Entity\Role::create(['id' => 'client', 'name' => 'Client']);
$role->save(); 
Jake Lacey
quelle
Ich aktualisiere meine Antwort ;-)
Adrian Cid Almaguer
@AdrianCidAlmaguer: Ich würde meine Antwort bearbeiten, um auch diese Kommentare zur PHP-Version aufzunehmen (5.6, 5.5.9, Drupal 8 usw.) ... Würde Ihre Antwort leichter verdaulich machen. Aber natürlich ist das Ihre Wahl ...
Pierre.Vriens
@ Pierre.Vriens Wenn Sie Ihre Antwort bearbeiten möchten, weiß ich nicht, welche Antwort, da es hier nur eine gibt, aber wenn Sie meine Antwort bearbeiten möchten, fahren Sie fort.
Adrian Cid Almaguer

Antworten:

17

Das Problem liegt im Datenarray, das den Namen nach Bezeichnung ändert :

$role = \Drupal\user\Entity\Role::create(array('id' => 'client', 'label' => 'Client'));
$role->save(); 

Oder Sie können verwenden:

//your data array
$data = array('id' => 'client', 'label' => 'Client');
//creating your role
$role = \Drupal\user\Entity\Role::create($data);
//saving your role
$role->save();
Adrian Cid Almaguer
quelle
Vielen Dank, ich werde es versuchen und Sie wissen lassen. Hmm, ich finde es ziemlich seltsam, dass Sie mit Drupal 8 das Array als solches zurückgeben, aber nicht weitergeben können.
Jake Lacey
1
Adrian hat gerade die Zeilen getrennt, damit die Kommentare Ihnen zeigen können, was bei @Jake los ist. Normalerweise ist der Einzeiler aus Ihrer ursprünglichen Frage in Ordnung
Clive
1
Oh, ich habe es falsch verstanden und die erste Überarbeitung der Antwort nicht gesehen - @Jake, solange Sie> = php5.4 verwenden, funktioniert die Syntax des kurzen Arrays (Drupal ändert nicht, wie PHP selbst funktioniert)
Clive
2
@Adrian Drupal 8 funktioniert nicht mit PHP <5.6;)
alexej_d
1
@ JakeLacey eine Freude und viel Glück in Ihren Projekten ;-)
Adrian Cid Almaguer