从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我希望你能给我一个关于如何做的线索作为答案!:)