Yii2从组件视图设置页面标题

时间:2016-03-17 10:48:49

标签: php yii2

我有页面,例如 / about

在页面视图中,我可以设置页面标题:$this->title = "abc" - 它可以正常工作。

此外,我在/ components中有Header组件,具有自己的视图/components/views/Header.php

如何从我的组件视图中更改页面标题? $this->title不起作用,因为我在组件的视图中,而不是页面。

2 个答案:

答案 0 :(得分:1)

不确定如何调用组件,但要更改标题,您需要指定要更改当前视图。

这是一个例子,在视图中添加类似的东西(或者使用你已经使用过的任何方法,但要确保将视图作为参数插入):

MyComponent::changeTitle($this);

在你的组件中(无论你想做什么方法):

public static function changeTitle($view)
{
    $view->title = 'changed';
}

如果这与您的情况无关,请添加视图和组件的示例,以便我们更好地了解该情景。

答案 1 :(得分:0)

将页面对象嵌入到组件中。然后通过聚合组合更改页面对象的属性。

组件类会读取类似......

class MyComponent extends Component
{
    private $pageObject;
    public $title;

    public function __construct(yii\web\View $view)
    {
        $this->pageObject = $view;
    }

    // this would change the title of the component
    public function setTitle(string $newTitle)
    {
        $this->title = $newTitle;
    }

    public function changePageTitle(string $newTitle)
    {
        $this->pageObject->title = $newTitle;
    }
}

如果您在视图中并且想要在该视图中使用组件,则可以使用

进行实例化。
$comp = new MyComponent($this);
// where `$this` is the current page object

现在,从组件范围,$this->title = 'bleh';将更改组件的标题,而$this->changePageTitle('bleh');将更改页面的标题。