当前位置: 首页 > news >正文

关于网站开发的在线舆情系统

关于网站开发的,在线舆情系统,郴州网站设计,公司的网站建设写在前面 本人开发的框架在2021年年初开发完成#xff0c;后面没有再做过任何维护和修改。是仅供大家参考交流的学习项目#xff0c;请勿使用在生产环境#xff0c;也勿用作商业用途。 框架地址#xff1a; https://github.com/yijiebaiyi/fast_framework 实现缓存 框架…写在前面 本人开发的框架在2021年年初开发完成后面没有再做过任何维护和修改。是仅供大家参考交流的学习项目请勿使用在生产环境也勿用作商业用途。 框架地址 https://github.com/yijiebaiyi/fast_framework 实现缓存 框架中的缓存、日志、ORM都是使用适配器模式。即定义一个抽象类抽象类中定义若干抽象方法。这样的话继承了抽象类的方法必须要实现这些抽象方法。我们就可以通过统一的入口去根据配置去调用对应的适配器类了。 其中缓存适配了Redis、Memcache以及Memcached三种。开发者可以在config.php配置文件中自行配置。 缓存主要实现了将数据写入缓存和获取缓存数据两个方法我们以redis为例redis缓存主要是使用redis字符串存储结构使用set和get方法来实现。 public function get($key, $time null, $expire null){$_key $this-makeKey($key);$res $this-slaveObj-get($_key);if (is_null($res) || false $res) {return null;}$res unserialize($res);if ($res isset($res[value])) {$time $res[time];$expire $res[expire];return $res[value];}return null;}public function set($key, $value null, $expire 3600): bool{return $this-masterObj-set($this-makeKey($key), serialize($this-makeValue($value, $expire)), $expire);}前面的代码只是适配器的实现那么我们怎么调用适配器类中的方法呢。我这边想到的是在框架核心代码根目录创建一个缓存文件类实现一个单例通过配置来读取我们要使用什么类型的缓存即使用哪个适配器类配置中配置项是缓存适配器类的类名称读取到了我们就加载他。具体实现代码: public static function instance($type default): CacheDriver{if ($type default) {$_type Config::get(Cache.default);} else {$_type $type;}if (!$_type) {throw new Exception(The type can not be set to empty!);}if (!isset(self::$_instance[$_type])) {$conf Config::get(Cache.{$_type});if (empty($conf)) {throw new Exception(The {$_type} type cache config does not exists!);}$class self::getNamespace() . \\ . ucfirst($_type);$obj new $class();if (!$obj instanceof CacheDriver) {throw new Exception(The {$class} not instanceof CacheDriver!);}$obj-init($conf);self::$_instance[$_type] $obj;} else {$obj self::$_instance[$_type];}return $obj;}注日志以及ORM的实现方法和缓存的实现类似也是通过实现一个适配器然后通过加载配置中定义的适配器类来加载。 实现完了之后我们测试一下 设置 $cacheObj Cache::instance(redis);$setRes $cacheObj-setModuleName(user)-set([id 1], [name ZhangSan], 1000);if ($setRes) {echo 设置成功;} else {echo 设置失败;}获取 $cacheObj Cache::instance(redis);$res $cacheObj-setModuleName(user)-get([id 1], $time, $expire);var_dump($res, $time, $expire);实现日志 日志的实现比较简单主要值实现了日志的写入功能通过php函数file_put_contents实现写入文件。当然也可以使用别的方法来实现。 相关代码 public function write(string $message, string $type){if (empty($message)) {trigger_error($message dose not empty! );return false;}if (empty($type)) {trigger_error($type dose not empty! );return false;}$path APP_PATH . DIRECTORY_SEPARATOR . runtime . DIRECTORY_SEPARATOR . logs . DIRECTORY_SEPARATOR . $type . / . date(Ym/d) . .log;$mark \n\n\n;$mark . time: . date(Y/m/d H:i:s) . \n;return \fast\util\File::write($mark . $message, $path, (FILE_APPEND | LOCK_EX));}public static function write($content, $path, $flags 0){$path trim($path);if (empty($path)) {trigger_error($path must to be set!);return false;}$dir dirname($path);if (!self::exists($dir)) {if (false self::mkdir($dir)) {trigger_error(filesystem is not writable: . $dir);return false;}}$path str_replace(//, /, $path);return file_put_contents($path, $content, ((empty($flags)) ? (LOCK_EX) : $flags));}应用层调用 Log::write(这是一条info类型的log, Log::INFO);实现操作数据库 数据库目前只实现了Mysql如果需要支持别的数据库只需要新增适配器即可。区别于缓存的实现数据库使用接口interface作为适配器的约定。 mysql的实现主要依赖mysqli库它对mysql库做了优化防注入更完善一些。CURD的具体实现思路是先获取要处理的数据最终拼接成sql来执行。 注链式调用通过方法返回$this来实现 简单看一下select查询的实现 public function select(){$this-checkMysqlOperate(table_empty);empty($this-_fields) $this-_fields *;$sql SELECT {$this-_fields} FROM {$this-_table};!empty($this-_where) $sql . WHERE {$this-_where};!empty($this-_order) $sql . ORDER BY {$this-_order};!empty($this-_group) $sql . GROUP BY {$this-_group};!empty($this-_limit) $sql . LIMIT {$this-_offset}, {$this-_limit};$this-_sql $sql;$mysqliResult mysqli_query($this-_connection, $this-_sql);if (false $mysqliResult) {$this-_error mysqli_error($this-_connection);return false;}return mysqli_fetch_all($mysqliResult, MYSQLI_ASSOC);}我们在应用层调用一下select $dbInstance Db::getInstance();$result $dbInstance-table(student)-where(SId in (01, 02, 13))-order(SId DESC)-select();update: $dbInstance Db::getInstance();$dbInstance-table(student);$dbInstance-where([Sid 01]);$result $dbInstance-update($data);数据验证器 数据验证器主要是用来验证数据是否符合我们的规范可以用来验证表单数据也可以用来验证业务数据。 主要实现是列举所有的验证规则依次校验主要有这些规则校验必传校验、类型校验、字符校验、数字校验、正则校验。 主要实现代码 public function check(array $data, array $rules): self{foreach ($rules as $rule $message) {$dataRule explode(., $rule);if (count($dataRule) 2) {continue;}// 必传校验if ($dataRule[1] required !isset($data[$dataRule[0]])) {array_push($this-errors, $message);continue;}if (!isset($data[$dataRule[0]])) {continue;}// 类型校验if (in_array($dataRule[1], $this-typeCheckName)) {if (false self::typeCheck(strval($dataRule[1]), $data[$dataRule[0]])) {array_push($this-errors, $message);continue;}}// 字符校验if (in_array($dataRule[1], $this-stringCheckName) isset($dataRule[2])) {if (false self::stringCheck(strval($dataRule[1]), $dataRule[2], $data[$dataRule[0]])) {array_push($this-errors, $message);continue;}}// 数字校验if (in_array($dataRule[1], $this-operatorCheckName) isset($dataRule[2])) {if (false self::operatorCheck(strval($dataRule[1]), $dataRule[2], $data[$dataRule[0]])) {array_push($this-errors, $message);continue;}}// 正则校验if (in_array($dataRule[1], array_keys($this-pregCheckRules))) {if (false self::pregCheck(strval($dataRule[1]), $data[$dataRule[0]])) {array_push($this-errors, $message);continue;}}}return $this;}字符传校验部分代码 public function stringCheck(string $rule, $value, $dataValue): bool{$flag true;switch ($rule) {case max:strlen($dataValue) $value $flag false;break;case min:strlen($dataValue) $value $flag false;break;case length:strlen($dataValue) ! $value $flag false;break;case in:$value explode(,, $value);!in_array($dataValue, $value) $flag false;break;case notIn:$value explode(,, $value);in_array($dataValue, $value) $flag false;break;}return $flag;}业务层这样调用 public function testValidate(){$validate new ValidateData();$data [age 17,weight 50公斤,name ZhangSan,country 这里是中国abc,sex 未知,mobile 11098186452,];$rules [age.required 请输入年龄,email.required 请输入邮箱,age.gt.18 年龄必须大于18,weight.float 体重必须为浮点数,name.max.6 姓名最大长度为6,country.alphaNum 国家必须为数字或者字母,sex.in.男,女 性别必须是男或者女,mobile.mobile 手机号码不合法,];$validate-check($data, $rules);var_dump($validate-getErrors());}
http://wiki.neutronadmin.com/news/11789/

相关文章:

  • 网站订单模板嘉兴网站制作计划
  • 可以做企业宣传的网站做防伪查询网站
  • 版式设计模板福州搜索引擎优化
  • 张家港网站建设早晨设计公司网站建设会计上怎么处理
  • 绛帐做网站html5网页设计论文
  • 邢台地区网站建设口碑好青海中小企业网站建设
  • 快速搭建网站前端插件西安网站建设雄账号
  • 全网模板建站系统qq是由哪家公司开发的
  • 做网站原型的简单工具dede可以做购物网站吗
  • 怎样搭建一个网站php 网站开发案例教程
  • 做婚庆网站有哪些网站开发哪些
  • 广州建网站哪儿济南兴田德润简介网站建设留言板的实现
  • 做公司网站需要什么手续京粉购物网站怎么做
  • 设计网站技术北京网站建设降龙
  • 做ppt图片用的网站有哪些问题网站建设的技术团队
  • 网站云优化网上下载的文件打开是乱码怎么办
  • 大庆油田app下载安装南昌网站排名优化报价
  • 网站的可行性分析怎么写手机电商平台怎么做的
  • 威海网站建设威海wordpress 博客摘要
  • 自己做网站怎么挣钱快手短链接生成
  • 做微信商城设计网站无锡信息网招聘
  • 彩票网站开发app动易网站建设工作室
  • 做电影网站教程如何申请免费的网站空间
  • 机关网站建设工程总结品牌推广怎么做
  • 免费做网站推广的软件4k视频素材网站
  • 网站建设 办公系统常州网架公司
  • dream8网站建设及设计临沂 网站优化
  • 天水市建设局网站成都哪里做网站备案
  • 建立官网需要多少钱seo资源网站排名
  • 集团网站源码wordpress添加分享按钮