在 OctoberCMS 中的另一个插件中使用用户插件会话

Using user plugin session in another plugin within OctoberCMS

我是 Laravel 和 OctoberCMS 的新手,两者都有很多文档,但由于我对两者都不太了解,因此非常感谢您的帮助。尝试同时理解两者也很令人困惑,特别是因为关于 laravel 的文档比十月多得多。

目前,我想扩展一个插件(Link to their extending plugin documentation). I need to use the session (username or email) from the rainlab user plugin (Link to their Git)并将其插入到另一个插件中。

我正在升级另一个插件,该插件当前依赖于用户通过表单输入他们的姓名,并在登录后将其替换为他们的用户名或电子邮件地址。

我的布局包含用户插件会话:

{% component 'session' %}

用户插件会话在我的其余页面上运行良好,但我之前尝试将其与插件一起使用时出现 'value not found' 错误。

我知道我需要 link 插件或创建一个新插件,然后从用户数据库中检索用户名(或电子邮件)并将其插入另一个 table,就可以'不太清楚如何做到这一点。更糟糕的是,我也没有使用 MVC 的经验!

在第二个插件的 Plugin.php 页面添加了这个函数(来自我找到的一个例子):

Plugin.php

public function boot()
 {
  Event::listen('rainlab.user.register', function($user) {
  // Code to register $user->email to mailing list
 });
}

但是我遇到了 'Undefined' 错误。

我还尝试添加一个 Routes.php 文件,因为我认为中间件可能存在问题。

Routes.php

Route::get('/test', function () {
    dd(
        Auth::getUser(),
        BackendAuth::getUser()
    );
})->middleware('web');

收到此错误:

"Call to undefined method RainLab\User\Facades\Auth::getUser()"

我已经用头撞墙一个星期了,任何提示或解释都会收到。如果您需要任何其他代码,请告诉我。我没有添加任何更多的代码,因为我知道这些代码不起作用(绕圈子,它会有点不稳定并且没有多大用处)并且我不想在此页面上发送垃圾代码。我已经展示了上面的部分来尝试解释一些以前的思维过程。此外,这是我项目的开始,与 OctoberCMS 和用户插件 Git 提供的通用代码相比,代码没有太多变化。

我相信这里的解释和一些帮助会让很多人受益,我可以看到我不是唯一有问题的人,部分原因是 laravel 最新版本的变化。

任何想法和解释将不胜感激。

更新:

为了更清楚地说明我需要会话出现的位置,我在下面添加了代码。 $name 需要替换为新变量,如电子邮件或用户名(来自会话)。

components\Chat.php

        $name = 'anonymous';
   if ($n = Input::get('name')) {
        $name = strip_tags($n);
    }
    $message = new Message(['text'=>$text, 'user_id'=>$user_id, 'name'=>$name]);

    $message->save();

    return $this->getMessagesOutput($message->id, [$message]);
}

如果在布局 {% component 'session' %}

中添加 session 会非常简单

现在在整个页面上,您可以直接在 twig 中使用 {{ user.email }} 来获得 user email

如果你需要使用 PHP 你可以使用 Auth facade

this code 必须在 component which are included in page which is using that layout 或其 life-cycle methods

// Returns the signed in user
$user = Auth::getUser();

echo $user->email;

你不能直接使用路由,因为路由 separate 来自页面执行,所以 Auth 在那里不起作用。

"I need to use the session (username or email) from the rainlab user plugin (Link to their Git) and insert it into another plugin."

只需创建具有此代码的新组件并将其包含在页面中。

您能否分享您需要做什么的详细信息以及您如何获取详细信息以及您需要在何时使用这些详细信息,以便我可以准确回答。

更新

// by default name
$name = 'anonymous';
$user_id = 0; // if user is not logged in

// if user is logged in then use session
if($sessionUser = \Auth::getUser()) {
   // if user didn't set name then you can assign some default value here or email
   $name = $sessionUser->name != '' ? $sessionUser->name : $sessionUser->email;  
   $user_id = $sessionUser->id;
}   

// not needed but if user want to edit its name then we use that one
if ($n = Input::get('name')) {
    $name = strip_tags($n);
}

$message = new Message(['text'=>$text, 'user_id'=>$user_id, 'name'=>$name]);

$message->save();

return $this->getMessagesOutput($message->id, [$message]);