【问题标题】:CakePHP 3 - Where put Global Functions and access on Models/Controllers?CakePHP 3 - 模型/控制器上的全局函数和访问权限在哪里?
【发布时间】:2016-08-15 11:45:38
【问题描述】:

我正在使用 CakePHP3,有两个问题:

  • 我可以把像“onlyNumbers()”这样的全局函数放在哪里,只返回字符串中的数字。我将在控制器和实体中使用此功能。
  • 如何在与用户输入不同的数据库中插入修改值?举个例子:我有一个输入字段(如邮政编码),带有 js 掩码,如:xxxxx-xxx,当用户发送它时,cakephp 接收带有点和破折号的字符串。我想只插入数据库中的数字。

我不知道它是否正确,但我认为向实体添加“_setZipCode()”函数并直接进行字符串修改是可行的,但我将如何访问“onlyNumbers()”全局函数?

谢谢!

【问题讨论】:

  • 你可以把函数放在你的应用程序bootstrap.php中
  • 在 cake 中,您可以将模型方法添加到您的 AppModel.php 文件中,然后可以通过 $this->myMethod() 和控制器在任何模型中访问 $this->Model->myMethod(); AppController.php,但这将只能由控制器访问。

标签: php function cakephp model helper


【解决方案1】:

您可以使用“组件”

http://book.cakephp.org/3.0/en/controllers/components.html

src/Controller/Components/GlobalComponent.php

namespace App\Controller\Component;

use Cake\Controller\Component;

class GlobalComponent extends Component
{
    public function onlyNumbers($string)
    {

       //Do something to get numbers or what you want

       return $result;
    }
}

YourControllerAppController 中加载组件(如果您想拥有全球访问权限)

class YourController extends Controller
{

    public function initialize()
    {
        parent::initialize();
        $this -> loadComponent('Global');
    }


    public function yourAction()
    {

       $only_numbers = $this -> Global -> onlyNumbers('ABC123BCA');

    }
}

【讨论】:

    【解决方案2】:

    我在哪里可以放置像“onlyNumbers()”这样的全局函数,只返回字符串中的数字。我将在控制器和实体中使用此功能。

    这听起来像是您想要进行验证,这应该在验证器中完成。 See this link.

    如果您真的需要一个全局函数,请将其放在 bootstrap.php 中,但我会保持 OOP 并将代码放入正确的位置和上下文中。

    如何在与用户输入不同的数据库中插入修改值?举个例子:我有一个输入字段(如邮政编码),带有 js 掩码,如:xxxxx-xxx,当用户发送它时,cakephp 接收带有点和破折号的字符串。我只想插入数据库中的数字。

    这个验证。你看过官方文档的这一章吗?

    已经有两个,也许三个规则可以用于您的用例:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 2013-10-23
      相关资源
      最近更新 更多