【问题标题】:Yii 2.0 How to extend Core ClassesYii 2.0 如何扩展核心类
【发布时间】:2015-07-06 21:09:55
【问题描述】:

我想扩展类 yii\web\Response。所以我在文件夹 components 中创建了一个新类 Response 并尝试覆盖 send 方法。

namespace app\components;

use Yii;

class Response extends \yii\web\Response{

    public function init(){
        parent::init();
    }

    /**
     * Sends the response to the client.
     */
    public function send()
    { ...

最后我尝试通过在配置中导入我的新响应类来导入它。

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'import'  => [
            'class' => 'app\components\Response',       
        ], 

为什么它不能像这样工作?

【问题讨论】:

    标签: yii yii2 yii-components


    【解决方案1】:

    试试这样:

    'components' => [
        'response' => [
            'class' => 'app\components\Response',
        ],
    

    【讨论】:

    • 好主意,但这只是覆盖 (Yii::$app) 下的属性而不是核心类
    • 不错,没试过,但是通过controllerMapyiiframework.com/doc-2.0/…进行设置时可能会起作用@
    • @Shqear - 他的回答确实覆盖了核心课程!你告诉它使用\app\components\Response 而不是\yii\web\Response。根据您的问题完成任务。如果有什么事情没有解决,那么请更新您的问题。在您的评论中,您说“不是核心课程”。 \yii\web\Response 是一个核心类,你还需要什么?回复文档:yiiframework.com/doc-2.0/yii-web-response.html - 回复来源:github.com/yiisoft/yii2/blob/master/framework/web/Response.php
    • @WadeShuler 请注意,这不是我的问题,但是,我正在寻找一种方法来用我自己的核心类替换 yii2 中的核心类,而无需处理源代码,因此它提供了一种简单的方法来覆盖一个要在所有其他核心类中使用的特定类,这些核心类扩展它而不扩展它们,但不幸的是 Yii2 不支持这样的东西,在当前版本中是不可能的
    • @Shqear - 如果不操纵源代码,我并不完全理解您的意思。您扩展任何核心类并将其放在/components/BaseController.php 和您的普通控制器中,那些“扩展”该类而不是yii/web/controller/。您必须更改要在其中使用它的每个控制器中的名称空间/路径,否则它们指向错误的文件。 - 我不认为你想要什么是可能的。是否有任何框架可以满足您的要求?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2013-08-14
    • 2015-12-03
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多