从yii2中的布局访问组件中的阵列

从yii2中的布局访问组件中的阵列,yii2,Yii2,我需要在每个控制器的每个页面加载时检查通知表中的记录 所以我把它写在一个组件中,该组件在引导过程中执行 我需要在布局中提供通知,以便我可以在通知菜单中显示它们 以下是我迄今为止所做的尝试: 组件: namespace admin\components; use Yii; use yii\base\Component; use admin\models\Notification; class NotificationManager extends \yii\base\Component{

我需要在每个控制器的每个页面加载时检查
通知
表中的记录

所以我把它写在一个组件中,该组件在引导过程中执行

我需要在布局中提供通知,以便我可以在通知菜单中显示它们

以下是我迄今为止所做的尝试:

组件:

namespace admin\components;

use Yii;
use yii\base\Component;
use admin\models\Notification;

class NotificationManager extends \yii\base\Component{
  public function init() {

    $notifications = Notification::find()->orderBy('id DESC')->asArray()->all();
    //echo "<pre>"; print_r($notifications);exit;

    if(count($notifications)>0){
      foreach ($notifications as $notif) {
        if($notif['type'] == 'courier')
          $courier_notifications[] = $notif;
        elseif($notif['type'] == 'order')
          $order_notifications[] = $notif;
      }

      Yii::$app->view->params['courier_notifications'] = $courier_notifications;
      Yii::$app->view->params['order_notifications'] = $order_notifications;
    }
  }
}
我不确定哪一部分出错了:在组件中还是在布局中?
感谢您的帮助。

如果您真的想进入引导模式,您需要实现
yii\base\BootstrapInterface
,并将您的逻辑放入
bootstrap($app)
方法中,以便通过将
yii::$app->params['notifications]
的值设置为逻辑结果,使param在站点范围内可用

另一种常见的方法是在组件中添加一个新方法
public function displayNotifications
或任何你想命名的方法,移动其中的所有逻辑,然后在布局/视图中等等,使用
Yii:::$app->notificationManager->displayNotifications()调用它。您还可以将其他参数传递给它并增强逻辑

notificationManager
必须替换为您在Yii应用程序配置中注册自定义组件的名称(
web.php
用于基本应用程序,
main.php
用于高级应用程序)

LE-如果您只为引导注册了组件,那么还应该在组件数组中注册它

'notificationManager'=>[
'class'=>'\admin\components\NotificationManager'

]

如果你真的想进入引导模式,你需要实现
yii\base\BootstrapInterface
并将你的逻辑放在
bootstrap($app)
方法中,以便通过将
yii::$app->params['notifications]
的值设置为你的逻辑结果,使参数在站点范围内可用

另一种常见的方法是在组件中添加一个新方法
public function displayNotifications
或任何你想命名的方法,移动其中的所有逻辑,然后在布局/视图中等等,使用
Yii:::$app->notificationManager->displayNotifications()调用它。您还可以将其他参数传递给它并增强逻辑

notificationManager
必须替换为您在Yii应用程序配置中注册自定义组件的名称(
web.php
用于基本应用程序,
main.php
用于高级应用程序)

LE-如果您只为引导注册了组件,那么还应该在组件数组中注册它

'notificationManager'=>[
'class'=>'\admin\components\NotificationManager'

]

我不知道为什么在引导过程中组件的执行无法为参数添加值。但我认为这是一种过激行为

您可以在必要时将逻辑移动到布局中的组件方法和访问

组成部分

'notificationManager ' => [
        'class' => 'admin\components\NotificationManager'
 ]
在配置文件的Components部分下添加component类

$courier_notifications = yii::$app->notificationManager->notifications('courier');
布局


我不知道为什么在引导过程中你的组件执行不能给params增加值。但是我相信这是一个过分的行为

您可以在必要时将逻辑移动到布局中的组件方法和访问

组成部分

'notificationManager ' => [
        'class' => 'admin\components\NotificationManager'
 ]
在配置文件的Components部分下添加component类

$courier_notifications = yii::$app->notificationManager->notifications('courier');
布局


是否为所有请求呈现布局?这是唯一的布局吗?@ck_arjun是的,这是我唯一的布局!小部件会做得更好。无论如何,为什么你不能将逻辑从init移动到组件内部的函数,并直接在布局中访问它?@ck_arjun我希望你能给我一个关于如何做的线索作为答案!:)是否为所有请求呈现布局?这是唯一的布局吗?@ck_arjun是的,这是我唯一的布局!小部件会做得更好。无论如何,为什么你不能将逻辑从init移动到组件内部的函数,并直接在布局中访问它?@ck_arjun我希望你能给我一个关于如何做的线索作为答案!:)