0

我是 Laravel 和 OctoberCMS 的新手,两者都有很多文档,但是因为我对两者都不太了解,所以我非常感谢一些帮助。试图同时理解两者也很令人困惑,尤其是关于 laravel 的文档比 10 月要多得多。

目前,我希望扩展一个插件(链接到他们的扩展插件文档)。我需要使用 rainlab 用户插件(链接到他们的 Git)中的会话(用户名或电子邮件)并将其插入另一个插件。

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

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

{% component 'session' %}

用户插件会话在我的其余页面上运行良好,但我之前尝试将它与插件一起使用时出现“未找到值”错误。

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

将此函数(来自我找到的示例)添加到第二个插件的 Plugin.php 页面:

插件.php

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

但我收到“未定义”错误。

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

路由.php

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

收到此错误:

“调用未定义的方法 RainLab\User\Facades\Auth::getUser()”

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

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

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

更新:

为了更清楚我需要我的会话出现在哪里,我已经包含了下面的代码。$name需要替换为新变量,例如电子邮件或用户名(来自会话)。

组件\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]);
}
4

1 回答 1

0

如果您要添加session布局,那将非常容易{% component 'session' %}

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

如果你需要使用 usingPHP你可以使用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无法在那里工作。

“我需要使用 rainlab 用户插件(链接到他们的 Git)中的会话(用户名或电子邮件)并将其插入到另一个插件中。”

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

你能分享一下你需要做什么以及你是如何获取细节的,以及你需要在什么时间使用这些细节,这样我就可以准确地回答了。

更新

// 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]);
于 2018-02-21T07:43:55.497 回答