我有页面,例如 / about 。
在页面视图中,我可以设置页面标题:$this->title = "abc"
- 它可以正常工作。
此外,我在/ components中有Header组件,具有自己的视图/components/views/Header.php
如何从我的组件视图中更改页面标题?
$this->title
不起作用,因为我在组件的视图中,而不是页面。
答案 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');
将更改页面的标题。