2015-03-05 11 views
6

Come caricare un modello all'interno di un componente in Cakephp 3.0? Prima (in CakePHP 2) si potrebbe utilizzareCakephp 3.0 - Carica il modello all'interno del componente

$Model = ClassRegistry::init($modelName); 
$Model->create(false); 
$saved = $Model->save($data); 

Che cosa è l'equivalente di quello in 3.0?

+3

Io suggerirei di consultare la documentazione prima di tali cose di base http://book.cakephp.org/3.0/en/orm. html – ndm

risposta

20

Come sottolineato in precedenza, è possibile utilizzare il TableRegistry per accedere a un modello:

use Cake\ORM\TableRegistry; 
$this->Articles = TableRegistry::get('Articles'); 

See here for documentation.

6

Come qualcuno ha detto nei commenti, si dovrebbe almeno leggere il migration guide per capire quali sono le differenze con 3.0. Per rispondere alla tua domanda specifica, è ora possibile utilizzare il TableRegistry:

$table = TableRegistry::get($tableName); 
1

Se si insiste per utilizzare loadModel che aggiunge l'istanza al controller come una proprietà, allora è così che si fa.

class ArticleComponent extends Component 
{ 
    public function initialize(array $config) 
    { 
     $this->controler = $this->_registry->getController(); 
    } 

    public function myFunction($id) 
    { 
     $this->controller->loadModel('Articles'); 
     $article = $this->controller->Articles->get($id); 

     debug($article); 
    } 
} 

In questo modo è come dire controller per aprire un modello per voi:

$ article = $ Component-> Controller-> UserModel;

Ma quando è possibile chiamare un modello immediatamente utilizzando TableRegistry qual è il punto di chiamare controller per chiamare un modello per voi.

$ articolo = $ componente-> UserModel;

Accorciare la storia loadModel() è un wrapper per TableRegistry

2

Una cosa che ho fatto è quello di costruire una classe loadModel nel componente. Ciò mantiene il mio codice coerente.

namespace App\Controller\Component; 

use Cake\Controller\Component; 
use Cake\ORM\TableRegistry; 

class MyComponent extends Component { 

    public function initialize(array $config) { 
     parent::initialize($config); 
     $this->loadModel('Users'); 
    } 

    private function loadModel($model) { 
     $this->$model = TableRegistry::get($model); 
    } 
} 
0

la mia risposta è lo stesso approccia altre risposte. ma, provo a salvare il record all'interno del componente.

In questo caso, il codice è come segue ...

use Cake\ORM\TableRegistry; 
--- 
$model = TableRegistry::get('MyModeles'); 
$entity = $model->newEntity(); 
$entity->set('filed1', 'newValue'); 
.... 
$model->save($entity); 
Problemi correlati