GVKun编程网logo

在cakephp中使用回调方法解密和加密

6

如果您想了解在cakephp中使用回调方法解密和加密的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析Cakephp3,如何在cakephp3中使用where子句和内部联接?、在CakePHP中

如果您想了解在cakephp中使用回调方法解密和加密的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析Cakephp3,如何在cakephp3中使用where子句和内部联接?、在CakePHP中使用ajax、在CakePHP中使用PHPExcel、在cakephp中使用脚手架的良好做法?的各个方面,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

在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).

以下是我的应用程序视图的屏幕截图:

View

和带有加密值的数据库:

DB

解决方法:

函数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子句和内部联接?

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中使用ajax

前言

虽然国内开发已经不怎么用CakePHP了,但这个框架在日本还是有一定市场。希望这个笔记能帮到在日开发的小伙伴们。

实现效果

输入关键字后在下方显示检索结果,相当于一个单页应用

result.gif

前提

阅读者已经拥有CakePHP和JS的基本知识

版本

CakePHP 3.6.1
PHP 7.4.10

准备
  1. 准备好controller和method
  2. 在使用ajax的界面导入js文件
  3. 修改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数据
    image.png

  1. 修改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);
                    }
                },
    
    

    最后效果
    image.png

在CakePHP中使用PHPExcel

在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中使用脚手架的良好做法?

在cakephp中使用脚手架的良好做法?

我正在使用Cake PHP.我已经了解了脚手架的概念,它似乎是一个很好的概念.但我的问题是,使用脚手架进行生产级应用程序开发是一个很好的做法,因为官方的CakePHP文档说它并不是完全灵活的,它意味着一种临时的起床和运行方式.

提前致谢.

解决方法

文档说它不够灵活.但是,当调试级别为0时,它仍然有效.

脚手架是自动CRUD创建. cakePHP在你烘烤时产生CRUD.

脚手架的优势在于它适用于早期开发阶段.

更多阅读

http://www.indywebshop.com/bestpractices/2007/06/13/early-impressions-of-cakephp/

但我建议不要使用它,因为在任何阶段你都需要编写自己的代码.但对于不经常更改的应用程序,它确实有帮助.

关于在cakephp中使用回调方法解密和加密的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Cakephp3,如何在cakephp3中使用where子句和内部联接?、在CakePHP中使用ajax、在CakePHP中使用PHPExcel、在cakephp中使用脚手架的良好做法?等相关知识的信息别忘了在本站进行查找喔。

本文标签: