2015-07-09 17:30:04 5599次浏览 4条回答 0 悬赏 10 金钱

使用了高级版, web站点目录为frontend里的web目录

common
  |__ config
    |-- bootstrap.php //这里定义了别名路径 util
backend
frontend
util // 这个是新添加的类库
  |____ image //目录
          |__ driver //目录
            |__ Gd.php //驱动文件
          |__ Image.php

common/config/bootstrap.php 如下:

Yii::setAlias('common', dirname(__DIR__));
Yii::setAlias('frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('console', dirname(dirname(__DIR__)) . '/console');
Yii::setAlias('util',  dirname(dirname(__DIR__)) . '/util');  //新添加的一行

在frontend/controllers/siteController.php 里的 actionImg 方法里调用

$image = new uitl\image\Image();

总是失败。使用
echo Yii::getAlias('@util/image/Image.php');
查看,路径是没有问题的。

使用的是 Yii自动加载器 http://www.yiichina.com/doc/guide/2.0/concept-autoloading

已经解决,以下方法。以前可能测试的有误

$image = new \uitl\image\Image();

最佳答案

  • qq3737002 发布于 2015-07-10 17:45 举报

    /frontend/config/bootstrap.php下面用

    // 包含自动加载文件
    require(__DIR__ . '/../../vendor/wechat/autoload.php');
    

    照着我的弄

    1 条回复
    回复于 2015-07-10 17:55 回复

    使用的官方的入口文件的,这样搞的话,不是重复了么?

  • 回答于 2015-07-10 02:58 举报

    $image = new uitl\image\Image();
    代码拿出来看看

    1 条回复
    回复于 2015-07-10 09:24 回复

    什么代码?在控制器里只有就这一行的

  • 回答于 2015-07-10 03:07 举报

    在高级应用模版里,每一逻辑层级会使用他自己的根别名。比如,前端层会使用 @frontend 而后端层会使用 @backend。因此,你可以把前端的类放在 frontend 命名空间,而后端的类放在 backend。 这样这些类就可以被 Yii 自动加载了。

    你这种没有autoload的要放到应用下面,光定义别名是不行的,没有加载进去

    1 条回复
    回复于 2015-07-10 09:24 回复

    已经在 common/config/bootstrap.php 里定义过了,应该会自动加载的吧?如果没有加载,又如何进行加载的?

  • 回答于 2015-07-10 11:11 举报

    失败是指?找不到路径?还是说你的image()函数报错?

    8 条回复
    回复于 2015-07-10 11:15 回复

    提示错误 Class 'frontend\controllers\util\image\Image' not found

    回复于 2015-07-10 11:41 回复

    没错啊,你的image确实不在这个路径里。
    检查你的别名设置,
    or
    把你的文件夹移到系统提示的地方去

    回复于 2015-07-10 14:29 回复

    这个是 util\images\Image.php 文件的内容
    namespace util\image;
    class Image{
    。。。。
    }

    这个放在controller目录下肯定不合适的,必须这个是全局使用的库文件的

    回复于 2015-07-10 14:43 回复

    现在是系统不知道你放哪了,懂?系统去这里找了 'frontend\controllers\util\image\Image'
    检查你的别名配置

    回复于 2015-07-10 15:06 回复
    Yii::setAlias('common', dirname(DIR));
    Yii::setAlias('frontend', dirname(dirname(DIR)) . '/frontend');
    Yii::setAlias('backend', dirname(dirname(DIR)) . '/backend');
    Yii::setAlias('console', dirname(dirname(DIR)) . '/console');
    Yii::setAlias('util', dirname(dirname(DIR)) . '/util'); //新添加的一行
    

    这个是别名配置在公共的 common/config/bootstrap.php文件里,和frontend、backend平级的,不对吗?

    回复于 2015-07-10 15:30 回复

    这个是对的,你的命名空间等路径是不是也指向的util?
    现在要解决的是系统为何还去frontend下找你的函数

    回复于 2015-07-10 15:38 回复

    一直找不出来原因...

    回复于 2015-07-10 17:32 回复

    平时大家怎么用的呀?

您需要登录后才可以回答。登录 | 立即注册
cfanbo
见习主管

cfanbo

注册时间:2015-05-23
最后登录:2015-09-10
在线时长:11小时52分
  • 粉丝2
  • 金钱110
  • 威望0
  • 积分220

热门问题