把 vendor里面的一个扩展提到 common的 extensions 下 该怎么提 [ 2.0 版本 ]
把 vendor里面的一个扩展提到 common 文件下的extensions 下 该怎么提,这样便于修改一些功能。因为vendor里面的代码不能随便改。
最佳答案
-
dashixiong 发布于 2017-04-14 16:14 举报
继承vendor里面的类即可。
共 6 条回复dashixiong 回复于 2017-04-14 16:42 回复@liuruiaaa 扩展里面肯定会有一个主类,比如helper中的Html类,你如果想扩展Html类 或者修改里面方法,你可以再你说的common文件夹中写这么一个相同名字的类,然后继承vendor里的Html类。然后你就可以扩展或者修改里面的方法了,但是你调用的时候要use你common文件里面的类,不要use vendor里面的类了。
@liuruiaaa 你说的是配置文件里的main.php吗,在那里面也是可以使用的。
其他 1 个回答
-
johnny1991 回答于 2017-04-14 16:38 举报
两个步骤:
1。将文件夹完整拷贝到common下面
2。这一步比较关键,涉及到了yii2的类自动加载的机制,需要符合下面的规范
每个类都必须置于命名空间之下 (比如 foo\bar\MyClass)。
每个类都必须保存为单独文件,且其完整路径能用以下算法取得:
// $className 是一个开头包含反斜杠的完整类名(译注:请自行谷歌:fully qualified class name)
$classFile = Yii::getAlias('@' . str_replace('\', '/', $className) . '.php');共 3 条回复johnny1991 回复于 2017-04-14 22:13 回复@liuruiaaa
配置文件应该像下面这种写法
1.打开vendor/yiisoft/extensions文件,找个你的extens的配置,
'name' => 'yiisoft/yii2-imagine','version' => '2.1.0.0', 'alias' => array ( '@yii/imagine' => $vendorDir . '/yiisoft/yii2-imagine', ),
2.找到这一行, '@yii/imagine' => $vendorDir . '/yiisoft/yii2-imagine'
3.然后在你的main.php里面里面这样写
'aliases' => ['@yii/imagine' => '@common/extensions/imagine',
]
johnny1991 回复于 2017-04-14 22:15 回复@johnny1991 这样的写法才是符合yii自动加载的规则的
liuruiaaa
最后登录:2017-07-14
在线时长:10小时53分
- 粉丝6
- 金钱163
- 威望10
- 积分363