首页 文章

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

提问于
浏览
0

我是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和用户插件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

    如果你在布局中添加 session 将非常容易 {% component '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 将无法在那里工作 .

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

相关问题