2015-05-04 7 views
6

Come JsHelper non più in CakePHP 3.0 è quindi quello che sto facendo è quello di salvare i miei dati del modulo nel database utilizzando AJAX
semplice forma ajax in CakePHP 3.0


devo solo due campi di input.
miei file sono:


  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); 
      } 
     } 
    } 
} 


Nota: mio modello hanno solo not empty regola per entrambi i campi

tutto quello che sto facendo funziona bene, ma non penso di farlo nel modo giusto o come dovrebbe essere.
per favore aiutami cosa mi manca e cosa non ho bisogno di fare.

risposta

6

portare via la linea Autorender e serializzare i dati che si desidera venga restituito:

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'); 
} 

La funzione Serialize dice torta che non aspetta la funzione di avere una visione, in modo da Autorender non è necessario (http://book.cakephp.org/3.0/en/views/json-and-xml-views.html).

+0

cosa succede se ho 13 campi nella tabella? Dovrei scrivere 13 righe $ this-> request-> data ['name'] = $ this-> request-> query ['name']; $ this-> request-> data ['age'] = $ this-> request-> query ['age']; ................... ?? è la loro una scorciatoia? – distromob