2016-10-25 3 views
0

Ich habe vor kurzem gelesen post auf, wie man einen CakePHP 3.x POST ohne Formulare (Updates auf der Index.ctp-Seite, anstatt mit Add.ctp oder Edit. ctp).CakePHP 3.x - Erstellen/Aktualisieren von Daten ohne Formulare

Ich habe 2 Fragen:

  1. Ändern POST aus einem Array Select-Anweisungen zu akzeptieren?

Mein index.ctp ist wie folgt:

<?php foreach ($resources as $resource): ?> 
     <tr> 
      <td><?= $this->Number->format($resource->id) ?></td> 
      <td><?= h($resource->brand) ?></td> 
      <td><?= h($resource->model) ?></td> 
      <td><?= h($resource->subtype) ?></td> 
      <td><?= $this->Form->postButton('Change Type',['controller'=>'Users', 'action'=>'change_resource', $resource->id, $resource->type->name])?></td> 
      <td><?= $resource->has('studio') ? $this->Html->link($resource->studio->name, ['controller' => 'Studios', 'action' => 'view', $resource->studio->id]) : '' ?></td> 
      <td><?= h($resource->created) ?></td> 
      <td><?= h($resource->modified) ?></td> 
      <td class="actions"> 
       <?= $this->Html->link(__('View'), ['action' => 'view', $resource->id]) ?> 
       <?= $this->Html->link(__('Edit'), ['action' => 'edit', $resource->id]) ?> 
       <?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $resource->id], ['confirm' => __('Are you sure you want to delete # {0}?', $resource->id)]) ?> 
      </td> 
     </tr> 
     <?php endforeach; ?> 

Und dann der Aktion, wie in dem verknüpften Stackoverflow Beitrag in dem entsprechenden Regler beschrieben:

public function change_resource($id,$existing_type) 
    { 
     $resources = TableRegistry::get('Resources'); 
     $resource = $resources->get($id); 
     $resource->type = ($existing_type == '')?'$resource->$type->name'; 
     $resources->save($resource); 
     return $this->redirect($this->referer()); 
    } 

zurzeit ich bin immer Syntaxfehler von

unerwartet ';' in Zeile 124,

bezieht sich auf die $ resource-> type-Zeile in der Controller-Methode. Wenn ich diese Zeile entfernen, die ich erhalten:

unerwartete $ Ressourcen auf der Leitung 125

, die ich das erwarten gegeben; wird entfernt, damit es denkt, dass sie alle in derselben Zeile sind.

  1. Ändern von POST für Nicht-Auswahleingänge (zB. Varchar/int/Text)

Ich mag wäre in der Lage sein, eine POST für die gesamte Tabelle zu tun, nicht nur eine Eingabe. Während jedoch zwei der Eingaben aus anderen Tabellen in Form von Arrays ausgewählt werden, sind alle anderen Standardeingaben (hauptsächlich varchar). Ich frage mich, wie man den obigen Controller ändert, um dies zu tun. Wenn ich POST für mehr als eine Eingabe ausführen möchte, benötige ich außerdem separate Methoden für jede einzelne Eingabe oder kann ich alles in einer einzigen Methode eingeben?

Antwort

0

Bitte beachten Sie, dass die Syntax Ihres ternären Operators falsch ist. Sie verpassen den Doppelpunkt (:) aus

Siehe Ternary Operator Example

Syntax: (expr1)? (Expr2): (expr3)

$resource->type = ($existing_type == '') ? $resource->$type->name : <other statement>; 
+0

Im verlinkten Beitrag aber sie tun es mit einem einfachen wählen zwischen zwei Optionen (admin & Benutzer), während ich dies mit einem Array tun mag. – mistaq

+0

Scheint, dass der Syntaxfehler Sie vom Testen abhält, also raten Sie, was die Lösung sein könnte. Beheben Sie den Syntaxfehler und informieren Sie uns darüber, was danach nicht mehr funktioniert (mit Besonderheiten). –