追随者 / 核心
我的框架的核心
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-24 19:11:44 UTC
README
概览
框架核心构建为 composer 模块(https://getcomposer.org.cn/)。
index.php
<?php require_once('vendor/autoload.php'); require_once('config.php'); $project = new \MyProject\EntryPoint\Site(); $project->init();
config.php
\Core\Config::setDb('default', [ 'host' => '192.168.0.1', 'name' => ‘dbname’, 'user' => 'user', 'password' => 123456, 'charset' => 'utf8' ]); Config::registerProject('MyProject', 'default');
composer.json
{ "require": { "follower/core": "dev-master" }, "autoload": { "classmap": [ "vendor/follower/core/backend", "app" ] } }
“app” - 是你的应用程序文件夹。推荐的后端项目结构
Api/
Controller/
Service/
EntryPoint/
Object/
Routes/
Controller/API
在“Api”和“Controller”文件夹中,有针对不同应用程序入口点的控制器(例如 api.php 和 index.php)。
这里有一些具有 methodGet、methodList 等方法的类,它们使用 Orm、OrmMapper、ActiveRecord 或 Service 进行数据处理。
class Entry extends Api { public function methodGet($args) { $entry = \MyProject\Object\Entry::find($args[‘id’]); return $entry->getValues(); } }
服务
在“Service”文件夹中有服务提供者。你应该在那里编写业务逻辑(而不是在模型和控制台中)。控制器用于输出,模型用于仅与其属性相关的逻辑。
class UserProvider { public function getUsersWithPermissions($permissions) { return \MyProject\Object\User::all() ->addFilter(‘permissions.alias’’, $permissions) ->load(); } }
入口点
在这里,你应该设置访问规则、控制器命名空间设置、注册路由,并为具体入口点运行应用程序的其他设置。
class Site extends \Core\EntryPoint { public function init() { Config::set('site.language', 'ru'); Routes::register(); $this->setLib('\Accounting\Controller'); $app = new App($this); $app->run(); } }
对象
对象类是模型。它包含数据表字段、名称和其他实体之间的关系描述。以下是配置示例。
self::$_config->setTable('User'); self::$_config->setFields([ 'name' => [ 'type' => 'varchar', 'default' => '', 'null' => false, ], 'password' => [ 'type' => 'varchar', 'default' => '', 'null' => false, ]);
路由
在“Routes”中,你可以为每个入口点创建路由类并重新定义默认路由规则。添加自定义路由示例
\Core\Router::register(['/add', 'post'], 'Index', 'new', []);
这意味着向 /add URL 发送 POST 查询将转到控制器:Index,方法:methodNew()。
默认路由规则
/controller/ -- 控制器,methodIndex()。
/controller/action -- 控制器,methodAction()。
框架哲学
对象
对象是一个模型,它代表某些实体
主要方法:$obj->setValue('property', $value); // 或 setValues,为多个值设置 $obj->getValue('property'); // 或 getValues,获取所有值
也可以使用 ActiveRecord 风格:$obj->property = $value; $obj->save();
框架支持模型之间的关系。
集合
表示具有方法和属性的数组对象的包装类。
getData() - 返回包含完整对象的数组,键是对象 ID。
getHashMap('id','name') - 返回哈希数组,id => name
getValues('id') - 返回 ID 的简单数组
集合流
用于在集合中执行复杂对象过滤。示例
$stream = $collection->stream(); $filter1 = function($obj) { /* complex filtering logic */ }; $stream = $stream->filter($filter1); $filter2 = function($obj) { /* complex filtering logic */ } $stream = $stream->filter($filter2); //And then return filtered collection: $stream->find();
数据库
原始查询
您仍然可以使用 PDO 编写原始 mysql 查询。
$db = \Core\Database\PDO::getInstance(); $result = $this->db->rows("SELECT * FROM `Entry` WHERE user_id = ?", array($user_id));
小型查询助手
还有一个用于简单查询的小类。
MySQL::insert($table, $params); MySQL::update($table, $params, $conditions); MySQL::delete($table, $conditions);
示例
MySQL::update(‘User’, array(‘name’ => $new_name), array(‘id’ => 1)); MySQL::delete(‘User’, array(‘id’ => 1));
QueryBuilder
用于使用不同条件逐步构建查询的查询构建器。也用于 \Core\Orm 内部。
composeSelectQuery() 方法将返回要执行的原始查询字符串。
$query = new QueryBuilder(‘User’); $query->setBaseAlias('pc') ->select('id', 'title', 'name') ->join('left', User_Catalog, 'pc', ['catalog', 'another.id']) ->where('somevalue', [124, 125]) ->where('max(count)', 20, '<') ->where('title', '%test', 'like') ->where('test', null); ->orderBy('id', 'asc') ->groupBy('param1') ->limit(20); echo $query->composeSelectQuery();
Orm
用于与数据库一起工作的层,它封装查询并支持关系。
主要方法
Orm::create($class_name); Orm::save($object); Orm::delete($object); Orm::find($class_name, $filterFields, $filterValues, $params); Orm::findOne($class_name, $filterFields, $filterValues, $params); Orm::load($class_name, $id); Orm::count($class_name, $filterFields, $filterValues);
简单示例
$user = Orm::create(‘User’); $user->setValues(array(‘name’ => $name, ‘password’ => $password)); Orm::save($user); $users = Orm::find(‘User’, array(‘name’, ‘type’), array($name, $type))); $user = Orm::load(‘User’, 12); Orm::delete($user);
Mapper
另一个更灵活的类。
$mapper = OrmMapper::create(User); $mapper->setFields(['test', 'name', 'amount']); ->setFilter(['test', 'name', 'amount'], [1,2,3]); ->load(); $users = $mapper->getCollection();
ActiveRecord
方便地处理对象的途径。一些示例
$users = User::all() ->addFilter(‘type’, $id) ->load() ->getCollection(); $user = User::find($id); $user->name = ‘Peter’; $user->save();