Yii2自定义类 - 命名空间错误

时间:2015-10-02 09:42:52

标签: namespaces yii2

我正在尝试创建一个自定义类,可以调用它来转换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);
    ...
}

但是我收到以下错误

无法找到&#39; app \ components \ Convert&#39;在文件中:/var/www/html/portal/components/Convert.php。命名空间丢失了吗?

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

感谢您的帮助。

利安

从评论中我发现错误是一个简单的错误,开始标记应该是

<?php

2 个答案:

答案 0 :(得分:1)

您需要从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);

答案 1 :(得分:1)

此错误只是意味着php无法在此文件中找到命名空间,并且由于命名空间似乎是正确的,因此可能是php开启标记错误。

根据您的服务器php配置,short open tags可能已停用,您应始终使用<?php