Phalcon搭建多模組框架十:註冊資料庫服務及模型簡單增刪改查
阿新 • • 發佈:2019-02-20
首先建立一個數據庫phalcon
,然後建立一張表做測試。
CREATE TABLE `ph_robots` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(70) NOT NULL,
`type` tinyint(1) NOT NULL,
`weight` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
1、開啟config/config.php
新增資料庫配置
'db' => [
'host' => 'localhost',
'port' => 3306,
'username' => 'root',
'password' => '123456',
'dbname' => 'phalcon',
'charset' => 'utf8'
],
完整的config/config.php
<?php
/**
* @desc 全域性配置檔案
* @author zhaoyang
* @date 2018年5月3日 下午7:54:47
*/
return [
// 服務配置
'services' => [
// mysql資料庫配置
'db' => [
'host' => 'localhost',
'port' => 3306,
'username' => 'root',
'password' => '123456',
'dbname' => 'phalcon',
'charset' => 'utf8'
],
// 排程器配置
'dispatcher' => [
// 處理 Not-Found錯誤配置
'notfound' => [
// 錯誤碼及錯誤提示(ajax和post請求)
'status_code' => 404,
'message' => 'Not Found',
// 錯誤跳轉的頁面
'namespace' => DEFAULT_MODULE_NAMESPACE . '\\Controllers',
'controller' => 'error',
'action' => 'error404'
],
],
// volt引擎相關配置
'view_engine_volt' => [
// 編譯模板目錄
'compiled_path' => BASE_PATH . 'runtime/' . DEFAULT_MODULE . '/compiled/volt' . DS,
// 是否實時編譯
'compile_always' => false,
// 附加到已編譯的PHP檔案的副檔名
'compiled_extension' => '.php',
// 使用這個替換目錄分隔符
'compiled_separator' => '%%',
// 是否要檢查在模板檔案和它的編譯路徑之間是否存在差異
'stat' => true,
// 模板字首
'prefix' => '',
// 支援HTML的全域性自動轉義
'autoescape' => false
],
// 模板相關配置
'view' => [
// 模板字尾
'view_suffix' => 'volt,phtml',
// 模板路徑
'view_path' => APP_PATH . DEFAULT_MODULE . '/views' . DS,
// 模板引擎,暫時支援viewEngineVolt or viewEnginePhp,與模板字尾一一對應
'view_service' => 'viewEngineVolt,viewEnginePhp',
],
// 過濾器設定
'filter' => [
// 過濾型別,支援string、trim、absint、int、email、float、int!、float!、alphanum、striptags、lower、upper、url、special_chars
'default_filter' => 'string,trim'
],
],
];
2、開啟config/services.php
註冊資料庫服務元件
use Phalcon\Db\Adapter\Pdo\Mysql;
$di->setShared('db', function () {
$dbConfig = $this->getConfig()->services->db->toArray();
$mysql = new Mysql($dbConfig);
return $mysql;
});
完整的config/services.php
<?php
/**
* @desc 註冊服務
* @author zhaoyang
* @date 2018年5月3日 下午8:01:34
*/
use Common\Common;
use Common\Validate;
use Library\Extensions\VoltExtension;
use Library\Plugins\DIspatcherPlugin;
use Phalcon\Config;
use Phalcon\Db\Adapter\Pdo\Mysql;
use Phalcon\DI;
use Phalcon\Di\FactoryDefault;
use Phalcon\Events\Manager as EventsManager;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mvc\Router;
use Phalcon\Mvc\View;
use Phalcon\Mvc\View\Engine\Volt as ViewEngineVolt;
use Phalcon\Mvc\View\Engine\Php as ViewEnginePhp;
$di = new FactoryDefault();
/**
* @desc 註冊排程器服務
* @author zhaoyang
* @date 2018年5月3日 下午8:38:34
*/
$di->setShared('dispatcher', function () {
$config = $this->getConfig();
$dispatcher = new Dispatcher();
$defaultNamespace = $config->module_default_namespaces ?? DEFAULT_MODULE_NAMESPACE . '\\Controllers';
$dispatcher->setDefaultNamespace($defaultNamespace);
$eventsManager = new EventsManager();
$eventsManager->attach('dispatch', new DIspatcherPlugin());
$dispatcher->setEventsManager($eventsManager);
return $dispatcher;
});
/**
* @desc 註冊配置服務
* @author zhaoyang
* @date 2018年5月3日 下午8:38:53
*/
$di->setShared('config', function () use ($config) {
return new Config($config);
});
/**
* @desc 註冊路由服務
* @author zhaoyang
* @date 2018年5月3日 下午8:39:06
*/
$di->setShared('router', function () use ($routerRules) {
$router = new Router();
// 自動刪除末尾斜線
$router->removeExtraSlashes(true);
foreach ($routerRules as $k => $v) {
$router->add($k, $v);
}
return $router;
});
/**
* @desc 註冊檢視引擎volt服務
* @author zhaoyang
* @date 2018年5月4日 下午5:28:52
*/
$di->setShared('viewEngineVolt', function (View $view, DI $di) {
// 獲取config服務有多種方法,這是其一
$voltConfig = $di->get('config')->services->view_engine_volt->toArray();
$voltConfig = Common::convertArrKeyUnderline($voltConfig);
$viewEngineVolt = new ViewEngineVolt($view, $di);
$voltConfig['compiledPath'] = isset($voltConfig['compiledPath']) ? Common::dirFormat($voltConfig['compiledPath']) : BASE_PATH . 'runtime/' . DEFAULT_MODULE . '/compiled/volt' . DS;
$mkdirRes = Common::mkdir($voltConfig['compiledPath']);
if (!$mkdirRes) {
throw new \Exception('建立目錄 ' . $voltConfig['compiledPath'] . ' 失敗');
}
$viewEngineVolt->setOptions($voltConfig);
// 獲取編譯器物件
$compiler = $viewEngineVolt->getCompiler();
// 新增擴充套件
$compiler->addExtension(new VoltExtension());
return $viewEngineVolt;
});
/**
* @desc 註冊檢視引擎php服務
* @author zhaoyang
* @date 2018年5月4日 下午5:29:15
*/
$di->setShared('viewEnginePhp', function (View $view, DI $di) {
$viewEnginePhp = new ViewEnginePhp($view, $di);
return $viewEnginePhp;
});
/**
* @desc 註冊檢視服務
* @author zhaoyang
* @date 2018年5月3日 下午10:52:37
*/
$di->set('view', function () {
// 獲取config服務有多種方法,這是其二
$viewConfig = $this->getConfig()->services->view;
$viewDir = $viewConfig->view_path ?? APP_PATH . DEFAULT_MODULE . '/views' . DS;
if (isset($viewConfig->view_suffix)) {
$viewSuffixs = explode(',', $viewConfig->view_suffix);
} else {
$viewSuffixs = [
'volt'
];
}
if (isset($viewConfig->view_service)) {
$viewServices = explode(',', $viewConfig->view_service);
} else {
$viewServices = [
'viewEngineVolt'
];
}
$engines = [ ];
foreach ($viewSuffixs as $k => $v) {
$suffix = '.' . ltrim($v, '.');
$engines[$suffix] = $viewServices[$k] ?? $viewServices[0];
}
$view = new View();
// 設定檢視路徑
$view->setViewsDir($viewDir);
// 註冊檢視引擎
$view->registerEngines($engines);
// 如果不需要“生成顯示到控制器佈局”和“生成顯示到主佈局”,則關閉這兩個渲染級別
$view->disableLevel([
View::LEVEL_LAYOUT => true,
View::LEVEL_MAIN_LAYOUT => true
]);
return $view;
});
/**
* @desc 註冊驗證服務
* @author zhaoyang
* @date 2018年5月11日 下午7:26:30
*/
$di->set('validate', function () {
$validate = new Validate();
return $validate;
});
/**
* @desc 註冊資料庫服務
* @author zhaoyang
* @date 2018年5月14日 下午9:01:36
*/
$di->setShared('db', function () {
$dbConfig = $this->getConfig()->services->db->toArray();
$mysql = new Mysql($dbConfig);
return $mysql;
});
至此已經配置完成,下面開始測試
3、在app/home/models下建立Robots.php模型檔案
<?php
namespace App\Home\Models;
use Phalcon\Mvc\Model;
class Robots extends Model {
public function initialize(){
$this->setSource('ph_robots');
}
}
4、在home模組新增RobotsController.php控制器
<?php
/**
* @desc 主頁
* @author zhaoyang
* @date 2018年3月23日 上午10:11:38
*/
namespace App\Home\Controllers;
use Common\BaseController;
use App\Home\Models\Robots;
class RobotsController extends BaseController {
public function indexAction() {
$robotsList = Robots::find();
foreach ($robotsList as $robot){
echo $robot->id,' ',$robot->name,' ',$robot->type,' ',$robot->weight,'<br/>';
}
}
public function addAction() {
$data = $this->get();
$robots = new Robots();
$res = $robots->create($data); // or save($data)
var_dump($res, $robots->id ?? '插入失敗', $robots->getMessages());exit;
}
public function infoAction() {
$id = $this->get('id', 'int');
$robot = Robots::findFirst($id);
echo $robot->id,' ',$robot->name,' ',$robot->type,' ',$robot->weight;exit;
}
public function editAction() {
$data = $this->get();
$robot = Robots::findFirst($data['id']);
$res = $robot->update($data); // or save($data)
var_dump($res, $res ? '更新成功' : '更新失敗', $robot->getMessages());exit;
}
public function deleteAction() {
$id = $this->get('id', 'int');
$robot = Robots::findFirst($id);
$res = $robot->delete();
var_dump($res, $res ? '刪除成功' : '刪除失敗', $robot->getMessages());exit;
}
}
訪問/robots/add/name/robot_one/type/1/weight/13
資料庫:
訪問/robots/index
訪問robots/info
訪問/robots/edit/id/1/type/2
資料庫:
訪問/robots/delete/id/1