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

时间:2018-02-21 00:48:52

标签: php laravel plugins octobercms octobercms-user-plugin

我是Laravel和OctoberCMS的新手,两者都有很多文档,但因为我对这两者都没有太多了解,我真的很感激一些帮助。尝试同时理解这两者同样令人困惑,特别是因为有更多关于laravel的文档比10月更多。

目前,我希望扩展一个插件(Link to their extending plugin documentation)。我需要使用rainlab用户插件(Link to their Git)中的会话(用户名或电子邮件)并将其插入另一个插件中。

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

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

{% component 'session' %}

用户插件会话在我的其余页面上工作正常,但我找不到'值未找到'我之前尝试将其与插件一起使用时出错。

我知道我需要链接插件或创建一个新插件,并从用户数据库中检索用户名(或电子邮件)并将其插入另一个表中,只是无法解决如何执行此操作。更糟糕的是,我也没有MVC的经验!

将此功能(从我找到的示例中)添加到第二个插件的Plugin.php页面:

Plugin.php

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

但我得到了未定义的'错误。

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

routes.php文件

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

收到此错误:

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

我一直在撞墙直到一周,任何提示或解释都会受到极大的欢迎。如果您需要任何其他代码,请告诉我。我还没有添加更多的代码,因为我知道这些代码不起作用(绕圈而且会有点不稳定而且用处不多)而且我不想此页面上的垃圾邮件代码。我已经展示了上面的内容,试图解释一些以前的思考过程。此外,它是我项目的开始,并且没有太多代码从OctoberCMS和User Plugin 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]);
}

1 个答案:

答案 0 :(得分:0)

如果您在布局session

中添加{% component 'session' %},那将非常简单

现在在整个页面上,您可以直接在树枝中使用{{ 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将无法在那里工作。

  

"我需要使用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]);