自定义类Concrete5.8

时间:2017-01-07 13:27:11

标签: concrete5 concrete5-8.x

C5和命名空间的新功能。试图添加我自己的类,但不断收到它无法找到类的错误,即使PHPstorm似乎知道它在哪里。看似简单,但我遗漏了一些东西。

课程application/src/cpi/funcs/Utils.php的路径

<?php

namespace Application\Src\Cpi\Funcs;

defined('C5_EXECUTE') or die(_("Access Denied."));

class Utils
{

    public function Getcreditcard_year($y = 10)
    {
        $currentYear = date("Y");
        $currentYearVal = date("y");
        $year_list = array();

        for ($i = 1; $i <= $y; $i++) { 
            $year_list[$currentYearVal] = $currentYear;
            $currentYear = $currentYear + 1;
            $currentYearVal = $currentYearVal + 1;
        } 
        return $year_list;
    }
}
?>

查看代码

<?php
use Application\Src\Cpi\Funcs\Utils;
$years = new Utils();
//$years->Getcreditcard_year();
?>

2 个答案:

答案 0 :(得分:4)

Concrete5.8中更新了一些核心功能,这些功能改变了您应该使用命名空间的方式。你有两个选择。

选项1:

Concrete5.8对其核心路由进行了一些小的更新,现在使用application/src/concrete/而不是application/src/来搜索您的自定义类,并在类有一个类时触发查看该文件夹{@ 1}}在其命名空间中。基本上,您将执行以下操作:

班级

更新班级的名称空间并将其移至 application / src / Concrete / Cpi / Funcs / Utils.php

\Application\Concrete\

代码视图

<?php 
namespace Application\Concrete\Cpi\Funcs;

class Utils{
    ...
}

选项2

在类的命名空间中使用use \Application\Concrete\Cpi\Funcs\Utils ... 时,重新启用旧版路由以读入application/src/

C5核心团队创建了一个函数来启用遗留名称空间\Application\Src\,您需要在引导期间调用它们。我在enableLegacyNamespace()文件中添加了编码。不确定它是否是启用它的最佳位置但它有效。该文件现在看起来像这样:

application/bootstrap/start.php

使用此选项意味着您不必修改或移动您的课程,并且可以根据您目前的设置进行操作。

只是分享一些建议

我有我的concrete5.8网站使用这两个选项。对于我的自定义类,我使用选项2但是当我想覆盖或扩展核心类时,我使用选项1并将文件放在<?php use Concrete\Core\Application\Application; use Concrete\Core\Foundation\ClassLoader; /* * ---------------------------------------------------------------------------- * Instantiate concrete5 * ---------------------------------------------------------------------------- */ // This line allows us now to use \Application\Src\ in our class namespace ClassLoader::getInstance()->enableLegacyNamespace(); $app = new Application(); ... 内并使用application/src/concrete/命名空间。

e.g。
说,我想扩展核心\Application\Concrete\类。首先,我创建php文件并将其添加到application / src / concrete /下。文件路径如下所示:PageController。我试图模仿application\src\Concrete\Page\Controller\PageController.php中找到的核心文件的文件夹路径。

<强>类

concrete\src\Page\Controller\PageController.php

然后使用<?php namespace Application\Concrete\Page\Controller; ... class PageController extends \Concrete\Core\Page\Controller\PageController { ... } 中的自定义别名覆盖核心别名路径,以便具体知道从自定义类读取:

application/config/app.php

希望这有帮助。

干杯。

答案 1 :(得分:1)

万一有人想知道,詹尼的答案在c5 8.5.1上仍然有效。正确的路径是application / src / C oncrete,而不是application / src / concrete。如果c不大写,则c5将因找不到您的班级而出现错误。