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;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
视图中的代码
<?php
use Application\Src\Cpi\Funcs\Utils;
$years = new Utils();
//$years->Getcreditcard_year();
?>
Run Code Online (Sandbox Code Playgroud)
Concrete5.8 中更新了一些核心功能,这些功能改变了您应该使用命名空间的方式。你有两个选择来解决这个问题。
Concrete5.8 对其核心路由进行了一些小的更新,现在使用application/src/concrete/而不是application/src/搜索您的自定义类,并且当类\Application\Concrete\在其命名空间中时会触发查看该文件夹。基本上,您将执行以下操作:
班级
更新类的命名空间并将其移动到application/src/Concrete/Cpi/Funcs/Utils.php
<?php
namespace Application\Concrete\Cpi\Funcs;
class Utils{
...
}
Run Code Online (Sandbox Code Playgroud)
代码在视图中
use \Application\Concrete\Cpi\Funcs\Utils
...
Run Code Online (Sandbox Code Playgroud)
重新启用旧路由以在类的命名空间中使用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();
...
Run Code Online (Sandbox Code Playgroud)
使用此选项意味着您不必修改或移动您的类,并且可以按照您当前设置的方式使用。
我有我的crete5.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
{
...
}
Run Code Online (Sandbox Code Playgroud)
然后用您的自定义别名覆盖核心别名路径,application/config/app.php以便具体知道从自定义类中读取:
return [
'aliases' => [
// extend the page controller class
'PageController' => '\Application\Concrete\Page\Controller\PageController',
];
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
干杯。
| 归档时间: |
|
| 查看次数: |
1756 次 |
| 最近记录: |