2015-05-04 8 views
6

As JsHelper nie więcej w CakePHP 3.0 jest więc to, co robię jest uratować moje dane formularza do bazy danych przy użyciu ajax
prosty formularz ajax w CakePHP 3.0


mam tylko dwa pola wejściowe.
moje pliki są:


  1. add.ctp
  2. js.js
  3. EmployeesController.php


add.ctp

 

    $this->Form->create('Employees'); 
     $this->Form->input('name', array('id'=>'name')); 
     $this->Form->input('age', array('id'=>'age')); 
     $this->Form->button('Add Info', array(
       'type'=>'button', 
       'onclick'=>'infoAdd();' 
     )); 
    $this->Form->end(); 

js.js

 

    function infoAdd() { 
     var name=$("#name").val(); 
     var age=$("#age").val(); 
     $.get('/employees/info?name='+name+"&age="+age, function(d) { 
      alert(d); 
     }); 
    } 

EmployeesController.php

class EmployeesController extends AppController { 
    public $components=array('RequestHandler'); 
    public function add() { 
     $emp=$this->Employees->newEntity(); 
     if($this->request->is('ajax')) { 
      $this->autoRender=false; 
      $this->request->data['name']=$this->request->query['name']; 
      $this->request->data['age']=$this->request->query['age']; 
      $emp=$this->Employees->patchEntity($emp,$this->request->data); 
      if($result=$this->Employees->save($emp)) { 
       echo "Success: data saved"; 
       //echo $result->id; 
      } 
      else { 
       echo "Error: some error"; 
       //print_r($emp); 
      } 
     } 
    } 
} 


Uwaga: mój model ma tylko not empty regułę dla obu polach

wszystko, co robię, działa dobrze, ale nie sądzę, że robię to we właściwy sposób lub tak jak powinno być.
proszę mi pomóc, czego mi brakuje i czego nie muszę robić.

Odpowiedz

6

Zabierz linię autoRender i szeregować dane, które mają zostać zwrócone:

public function add() { 

    $data = []; 

    $emp=$this->Employees->newEntity(); 
    if($this->request->is('ajax')) { 
     $this->request->data['name']=$this->request->query['name']; 
     $this->request->data['age']=$this->request->query['age']; 
     $emp=$this->Employees->patchEntity($emp,$this->request->data); 
     if($result=$this->Employees->save($emp)) { 
      $data['response'] = "Success: data saved"; 
      //echo $result->id; 
     } 
     else { 
      $data['response'] = "Error: some error"; 
      //print_r($emp); 
     } 
    } 

    $this->set(compact('data')); 
    $this->set('_serialize', 'data'); 
} 

Funkcja serialize mówi ciasto, że nie spodziewa funkcję mieć widok, więc autoRender nie jest potrzebna (http://book.cakephp.org/3.0/en/views/json-and-xml-views.html).

+0

co jeśli mam 13 pól w tabeli? Powinienem napisać 13 wierszy $ this -> request-> data ['name'] = $ this-> request-> query ['name']; $ this-> request-> data ['age'] = $ this-> request-> query ['age']; ................... ?? jest ich skrót? – distromob