【问题标题】:Yii2 Custom Class - namespace errorYii2 自定义类 - 命名空间错误
【发布时间】:2015-10-02 09:42:51
【问题描述】:

我正在尝试创建一个自定义类,可以调用它来为 MySQL 转换日期和时间。

我使用的是 Yii2 Basic 模板

我在名为 Convert.php 的组件中创建了一个文件夹和一个文件

<?
namespace app\components;

use Yii;

class Convert
{
    const DATE_FORMAT = 'php:Y-m-d';
    const DATETIME_FORMAT = 'php:Y-m-d H:i:s';
    const TIME_FORMAT = 'php:H:i:s';

    public static function toMysql($dateStr, $type='date', $format = null) {
        if ($type === 'datetime') {
              $fmt = ($format == null) ? self::DATETIME_FORMAT : $format;
        }
        elseif ($type === 'time') {
              $fmt = ($format == null) ? self::TIME_FORMAT : $format;
        }
        else {
              $fmt = ($format == null) ? self::DATE_FORMAT : $format;
        }
        return \Yii::$app->formatter->asDate($dateStr, $fmt);
    }   
}

?>

然后我尝试在我的控制器中调用此方法

use app\components\Convert;

...

public function actionCreate()
{
    ...
    $model->date_of_birth = Convert::toMysql($model->date_of_birth);
    ...
}

但是我收到以下错误

无法在文件中找到“app\components\Convert”:/var/www/html/portal/components/Convert.php。缺少命名空间?

我可能遗漏了一些简单的东西,但我看不到它。

感谢您的帮助。

利亚姆

从cmets中,我发现错误是一个简单的错误,开始标签应该是

<?php

【问题讨论】:

  • 在 Yii 配置文件中你必须告诉 Yii 从你的 Components 文件夹中导入文件夹,否则你的类是不可见的。
  • 对不起,你错了 MrD,你不需要在 Yii2 中导入类,它会自动加载
  • 这可能只是一个短暂的开放标签问题,您应该始终使用&lt;?php
  • soju,我想你可能就在这里.. 会告诉你,我有更多错误,哈哈
  • 好的,谢谢soju,上面代码的问题是开始标签,我真是个白痴。烧酒,你想添加一个答案吗,我会打勾

标签: namespaces yii2


【解决方案1】:

这个错误仅仅意味着php在这个文件中找不到命名空间,并且由于命名空间似乎是正确的,它可能是一个php打开标签错误。

根据您的服务器 php 配置,short open tags 可能会被禁用,您应该始终使用&lt;?php

【讨论】:

    【解决方案2】:

    你需要从 Yii2 扩展基础组件:

    <?php
    namespace app\components;
    use yii\base\Component;
    
    use Yii;
    
    class Convert extends Component
    {
        const DATE_FORMAT = 'php:Y-m-d';
    

    然后放入config/web.php

    'components' => [
        'convert' => [
           'class' => 'app\components\Convert',
         ],
    ]
    

    并以

    的身份访问它
    $model->date_of_birth = Yii::$app->convert->toMysql($model->date_of_birth);
    

    【讨论】:

    • 嗨,谢谢你的回答,我看到了这个,我只是想我可以通过使用包括在内;在顶部,我仍在学习命名空间 - 那么将 index.php 中的文件作为必需项包含在内呢,或者这是否与 Yii2 的工作方式背道而驰?抱歉听起来很愚蠢,哈哈
    • 好的,我按照说明进行操作,现在出现此错误 - 获取未知属性:yii\web\Application::Convert
    • 试试 Yii::$app->convert ,小写
    • 如果我使用 Yii::$app->convert->toMysql($model->date_of_birth)(小写),我得到这个错误 - Unable to find 'app\components\Convert' in文件:/var/www/html/portal/components/Convert.php。缺少命名空间?
    • @soju 什么意思?
    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多