如果您想了解在cakephp中使用回调方法解密和加密的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析Cakephp3,如何在cakephp3中使用where子句和内部联接?、在CakePHP中
如果您想了解在cakephp中使用回调方法解密和加密的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析Cakephp3,如何在cakephp3中使用where子句和内部联接?、在CakePHP中使用ajax、在CakePHP中使用PHPExcel、在cakephp中使用脚手架的良好做法?的各个方面,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- 在cakephp中使用回调方法解密和加密
- Cakephp3,如何在cakephp3中使用where子句和内部联接?
- 在CakePHP中使用ajax
- 在CakePHP中使用PHPExcel
- 在cakephp中使用脚手架的良好做法?
在cakephp中使用回调方法解密和加密
我想使用Callbacks方法在将值存储在数据库中之前对其进行加密,并在将其显示回应用程序之前对其进行解密.
我使用了documentation中提供的示例之一.
在我的core.PHP中,放入以下内容:
Configure::write('Security.cipherCriptKey','su0HKsspmdbwgK6LdQLqzp0YmyaTI7zO');
在我的模型中,我使用了两种方法:
> beforeSave()
public function beforeSave($options = array()) {
$value=$this->data['Internship']['encryptedindb'];
$encrypted = Security::encrypt($value, Configure::read('Security.cipherCriptKey'));
$this->data['Internship']['encryptedindb'] = $encrypted;
return true;
}
> afterFind()
public function afterFind($results, $primary = false) {
foreach ($results as $key => $val) {
if(isset($val['Internship']['encryptedindb'])){
$results['Internship']['encryptedindb'] = Security::decrypt($val['Internship']['encryptedindb'], Configure::read('Security.cipherCriptKey'));
}
return $results;
}
}
beforeSave()似乎运行良好,因为我可以在数据库中看到加密的值.但是,在我看来,并且当我希望看到该字段的内容已解密时,它将显示为一个空字段.好像afterFind()方法无法将其解密(它始终返回false).
以下是我的应用程序视图的屏幕截图:
和带有加密值的数据库:
解决方法:
函数Security :: encrypt($text)使用AES-256算法来加密$text.它返回二进制数据,因此,应将其存储为二进制数据类型,而不是文本类型.
以下任何一项都可以工作:
>二进制
> VARBINARY
> BLOB(TINYBLOB,BLOB,MEDIUMBLOB和LONGBLOB).
将其设置为VARBINARY(255)应该足够了.
有关更多参考,请参阅:
>功能Security::encrypt()
.
> Encrypt MySQL data using AES techniques
Cakephp3,如何在cakephp3中使用where子句和内部联接?
我正在尝试从产品表中获取评论表.
并且我添加了列名’delete_yn’,这意味着该评论是否被删除.
我在下面使用了一些蛋糕查询
return $this->Product->find()
->contain(['ProductReview', 'Users'])
->where(['Product.product_code' => $productCode])
->toArray();
结果很好.
但是,现在我要检查评论是否已被用户删除,并且在“ del_yn”列中仅显示“ n”
我添加了此查询
->andWhere(['Product.ProductReview.del_yn' => 'n'])
在where子句之后.
但这行不通.
请帮忙.
解决方法:
而不是使用andWhere([‘Product.ProductReview.del_yn’=>’n’]),而是使用匹配(ifcakePHP 3.0.x)或innerJoinWith()if(cakePHP 3.1.x)并过滤匹配特定关联数据的记录.例如,
return $this->Product->find()
->matching('ProductReview', function ($q) {
return $q->where(['ProductReview.del_yn' => 'n']);
})
->contain(['ProductReview', 'Users'])
->where(['Product.product_code' => $productCode])
->group('Product.id')
->toArray();
在CakePHP中使用ajax
前言
虽然国内开发已经不怎么用CakePHP了,但这个框架在日本还是有一定市场。希望这个笔记能帮到在日开发的小伙伴们。
实现效果
输入关键字后在下方显示检索结果,相当于一个单页应用
前提
阅读者已经拥有CakePHP和JS的基本知识
版本
CakePHP 3.6.1
PHP 7.4.10
准备
- 准备好controller和method
- 在使用ajax的界面导入js文件
- 修改js文件,实现前后端交互
*
开始
后端
创建Controller,Model和对应的Template
在<ProjectFolder>\src\Controller里创建Controller
namespace App\Controller; use App\Controller\AppController; class SentencesController extends AppController { #class的初始化 public $SentencesTable; public function initialize(): void { $this->loadComponent(''RequestHandler''); } #搜索函数 public function search() { $this->autoRender = false; if ($this->request->is(''ajax'')) { $data = $this->request->getData(); $results = $this->Sentences->find()->where([ ''sentences_name LIKE'' => ''%'' . $data[''keyword''] . ''%'', ''template_available_lang LIKE'' => ''%'' . $data[''lang''] . ''%'' ])->toList(); if (is_null($results)) { $results = ''没有关联情报''; } else { //把数组转换成json,返回给前端 echo json_encode($results, JSON_UNESCAPED_UNICODE); exit; }} }
在<ProjectFolder>\src\Model\Table里创建SentencesTable
<?php namespace App\Model\Table; use Cake\ORM\Table; class SentencesTable extends Table { public function initialize(array $config): void { parent::initialize($config); $this->setTable("sentences"); } }
在<ProjectFolder>\src\Template\Layout\下创建custom.ctp文件
<html> <head> <title>search</title> </head> <body> <div class="grid"> //搜索区 <div id="searchArea"> <input placeholder="请输入关键字" id="searchBox"> <button id="searchButton">搜索</button> </div> //结果区 <div id="result-list"> </div> </div> </body> //在最后导入js文件 <?= $this->Html->script([ "serach.js", ]); ?> </html>
4.修改HomeController.php文件,指定模板为以上custom模板
<?php namespace App\Controller; use App\Controller\AppController; class HomeController extends AppController{ public function initialize():void{ parent::initialize(); } public function index(){ //指定使用模板 $this->viewBuilder()->setLayout("custom"); } }
- 在Template文件夹下创建index的ctp文件(因为指定了模板,此文件为空白即可)
在routes.php中添加路由
$routes->connect(''/search'', [''controller'' => ''Sentences'', ''action'' => ''search'']);
后端处理到此全部完成
前端
在<project>\webroot\js\文件夹里创建search.js
//按搜索后,获取用户输入关键字并进行搜索 $("#searchButton").click(function() { var rawQuery = $("#searchBox").val(); $.ajax({ url: "../search", method: ''POST'', dataType: ''json'', data: { keyword: rawQuery }, //成功时的处理,先在命令台检查 success: function(response) { for (var i = 0; i < response.length; i++) { //这里的sentence_name是sentence的其中一个属性 console.log(response[i].sentence_name) } }, //失败时的处理 error: function(XMLHttpRequest, textStatus, errorThrown) { console.log(''Error : '' + errorThrown + "\n" + XMLHttpRequest.status + "\n" + XMLHttpRequest.statusText + "\n" + textStatus); } }); });
测试一下,成功的话会获得json数据
修改success后的函数处理,把json数据转换为html
*response[i].后的均为属性success: function (response) { for (var i = 0; i < response.length; i++) { console.log(response[i].template_name); var tr_str = "<tr data-value=''" + response[i].title_transfer_flg + "'' category'' id=''" + response[i].template_category_id + "''> <td list-item'' id=" + response[i].id + ">" + response[i].template_name + " <button btn'' id=''title-btn'' href=''#''>件名にする</button></td></tr>"; //插入到现有的div中 $("#result-list").append(tr_str); } },
最后效果
在CakePHP中使用PHPExcel
背景
好吧,我试着问这个问题,但它关闭得比一个可怕的安全漏洞更快.我想用PEAR的Spreadsheet Excel Writer编写一个excel文件.我无休止地谷歌一个简单的方法来做到这一点,最后found a helper可能实际上做的工作.
但它使用PHPExcel,因此我将不得不重写该脚本,这是我最不担心的.我只是不想现在开始,然后仍然无法让它工作.
我还根据帮助者的要求下载了PHPExcel.
我有什么?
我有帮助器,我已经将控制器添加到控制器中,如下所示:
public $helpers = array('PHPExcel.PHPExcel');
我已经在线创建(复制并粘贴)了脚本到视图中,只是为了测试它是否有效.
问题是什么
我收到一个错误:
Error: The application is trying to load a file from the PHPExcel plugin
Error: Make sure your plugin PHPExcel is in the app\Plugin directory and was loaded
我已将该文件包含在APP / vendor / PHPExcel.PHP文件夹中(因为我在某处读到如果插件不遵循MVC框架,它需要进入那里)但它仍然不起作用.还在插件目录中尝试了它并且出现了同样的错误.这是我第一次使用帮助器(希望不是最后一次)所以我对此非常无能为力.
我还在APP / View / Helper /文件夹中包含了PHPExcelHelper.PHP的实际帮助器.
事情是我甚至无法通过第1步.有人可以告诉我文件需要去哪里,以便我可以让它工作吗?
解决方法:
如果您看一下Helper代码,您会发现有一个名为loadEssentials的函数:
protected function loadEssentials() {
// load vendor class
App::import('vendor', 'PHPExcel/Classes/PHPExcel');
if (!class_exists('PHPExcel')) {
throw new CakeException('vendor class PHPExcel not found!');
}
}
现在您可以看到它在PHPExcel库的vendor文件夹中查找.你应该做的是将PHPExcel代码放在App / vendor /中.然后看看how to load vendor packages.然后帮助应该在App / View / Helper中,当你立即它时它应该工作.还要检查供应商中文件的raed / write / excute权限,具体取决于您的操作系统.
在cakephp中使用脚手架的良好做法?
提前致谢.
解决方法
脚手架是自动CRUD创建. cakePHP在你烘烤时产生CRUD.
脚手架的优势在于它适用于早期开发阶段.
更多阅读
http://www.indywebshop.com/bestpractices/2007/06/13/early-impressions-of-cakephp/
但我建议不要使用它,因为在任何阶段你都需要编写自己的代码.但对于不经常更改的应用程序,它确实有帮助.
关于在cakephp中使用回调方法解密和加密的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Cakephp3,如何在cakephp3中使用where子句和内部联接?、在CakePHP中使用ajax、在CakePHP中使用PHPExcel、在cakephp中使用脚手架的良好做法?等相关知识的信息别忘了在本站进行查找喔。
本文标签: