Я создаю портал, основанный на фреймворке cakephp 3 и панели администратора, выполненном в виде плагина, чтобы отделить файлы от остальных. Таблицы, которые будут охватывать только панель администратора, я вставляю отдельно созданной базы данных «admin».
Я правильно настроил подключения к базе данных в config / app.php.
'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', 'username' => 'user', 'password' => 'password', 'database' => 'portal', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'log' => false, ], 'admin' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', 'username' => 'user', 'password' => 'password', 'database' => 'admin_portal', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'quoteIdentifiers' => false, 'log' => false, ], ],
Поэтому у меня есть плагин Admin.
Я создал внутренние контроллеры плагина 2:
плагины / Admin / SRC / Controller / AdminController.php
<?php namespace Admin\Controller; use Cake\Controller\Controller; use Cake\ORM\TableRegistry; class AdminController extends Controller { public function initialize() { parent::initialize(); $this->loadComponent('RequestHandler'); $this->loadComponent('Flash'); } }
плагины / Admin / SRC / Controller / MainController.php
<?php namespace Admin\Controller; use Admin\Controller\AdminController; class MainController extends AdminController { public function dashboard() { $this->loadModel('Messages'); $results = $this->Messages->find('all'); pr($results); } }
И я создал модель для таблицы Messages
<?php namespace Admin\Model\Table; use Admin\Model\Entity\Message; use Cake\ORM\Query; use Cake\ORM\RulesChecker; use Cake\ORM\Table; use Cake\Validation\Validator; class MessagesTable extends Table { public function initialize(array $config) { parent::initialize($config); $this->table('messages'); $this->displayField('name'); $this->primaryKey('id'); } public static function defaultConnectionName() { return 'admin'; } }
Когда я запускаю действие панели мониторинга из MainController вместо результатов из таблицы сообщений, я получил ошибку:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'portal.messages' doesn't exist
Таким образом, CakePHP ищет табличные сообщения в базе данных по умолчанию, а не в таблице «admin_portal».
Что я делаю не так? Как-то торт не учитывает метод defaultConnectionName () в модели плагина. Я попытался использовать этот метод в некоторой модели в / src (не в плагине) – тогда он работал правильно.
На самом деле вы не используете свою модель плагина,
$this->loadModel('Messages');
вызов (попробуйте) загрузить модель Messages
уровня приложения. Если вы хотите загрузить модули плагинов, используйте синтаксис плагинов / точек, т. Е.
$this->loadModel('Admin.Messages');
См. Также « Поваренная книга»> «Плагины»> «Плагины»