【问题标题】:Using user plugin session in another plugin within OctoberCMS在 OctoberCMS 的另一个插件中使用用户插件会话
【发布时间】:2018-07-31 11:34:44
【问题描述】:

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

目前,我希望扩展一个插件(Link to their extending plugin documentation)。我需要使用来自rainlab 用户插件(Link to their 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 文件,因为我认为中间件可能存在问题。

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]);
}

【问题讨论】:

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


    【解决方案1】:

    如果您在布局{% 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在那里不起作用。

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

    【讨论】:

    • 感谢您迄今为止的帮助。我已经用目的地更新了我的帖子。
    • 更新的答案请检查它,它可能会帮助您使用您的代码
    • 超棒的!工作了一个款待!具有讽刺意味的是,实际上我昨晚离开了 OctoberCMS 和 Laravel,并决定为我现有的网站创建自己的后台办公室,因为它可以更快地编写我自己的代码,而且不会弄乱插件。然而,这是一个很好的练习,我相信这个例子会对很多人有所帮助。再次感谢哈迪克!
    猜你喜欢
    • 2014-11-29
    • 2017-05-14
    • 1970-01-01
    • 2017-04-05
    • 2012-03-16
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多