如何覆盖 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,
]);
我需要覆盖 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,
]);