如何覆盖 Yii2 中的小部件方法?

How do I override a widget method in Yii2?

我需要覆盖 Yii2 LinkPager 小部件中的 renderPageButton() 方法。方法文档特别指出“您可以覆盖此方法以自定义页面按钮的生成”,但我不知道该怎么做。谢谢。

您要覆盖的 class 已记录在案 here

您可以通过以下方式覆盖它:

  • 在你的 yii2 应用程序根文件夹中创建一个新目录,如 widgets
  • 创建一个新的 php 文件(如 MyLinkPager.php)并在其中创建一个新的 class (MyLinkPager),扩展 yii\widgets\LinkPager
  • 您可以使用“app\widgets”命名空间(即,如果您使用的是基本的 yii2 应用程序)
  • 在您的 class 中,仅实现您要覆盖原始 class
  • 的功能
  • 在任何地方使用新的 class 而不是原来的

可以这样覆盖LinkPager

新建文件./widgets/MyLinkPager.php:

<?php
namespace app\widgets;
use yii\widgets\LinkPager;
class MyLinkPager extends LinkPager 
{
    protected function renderPageButtons()
    {
        // do whatever you want, it may help to
        // copy code from parent::renderPageButtons() 
        // or even call 
        return parent::renderPageButtons();
    }
}

然后在您的视图中以这种方式使用它(参见此处:https://www.yiiframework.com/doc/guide/2.0/en/output-pagination):

use yii\widgets\LinkPager;

echo LinkPager::widget([
    'pagination' => $pagination,
]);