Concrete5.8 中更新了一些核心特性,改变了你应该使用命名空间的方式。你有两个选择来解决这个问题。
选项1:
Concrete5.8 对其核心路由进行了一些小的更新,它现在使用application/src/concrete/
而不是application/src/
搜索您的自定义类,并且当类\Application\Concrete\
在其命名空间中时触发查看该文件夹。基本上,您将执行以下操作:
班级
更新类的命名空间并将其移动到application/src/Concrete/Cpi/Funcs/Utils.php
<?php
namespace Application\Concrete\Cpi\Funcs;
class Utils{
...
}
代码在视图
use \Application\Concrete\Cpi\Funcs\Utils
...
选项 2
在类的命名空间中使用application/src/
时,重新启用旧版路由以读入。\Application\Src\
C5 核心团队创建了一个函数来启用遗留命名空间,enableLegacyNamespace()
您需要在引导期间调用该函数。我已经在我的application/bootstrap/start.php
文件中添加了编码。不确定它是否是启用它的最佳位置,但它可以工作。该文件现在如下所示:
<?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();
...
使用此选项意味着您不必修改或移动您的课程,并且可以按照您当前设置的方式使用。
只是分享一些建议
我有我的concrete5.8 站点来使用这两个选项。对于我的自定义类,我使用选项 2,但是当我想覆盖或扩展核心类时,我使用选项 1 并将文件放入application/src/concrete/
其中并使用\Application\Concrete\
命名空间。
例如
,我想扩展核心PageController
类。首先,我创建 php 文件并将其添加到 application/src/concrete/ 下。文件路径如下所示: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
以便具体知道从自定义类中读取:
return [
'aliases' => [
// extend the page controller class
'PageController' => '\Application\Concrete\Page\Controller\PageController',
];
希望这可以帮助。
干杯。