Laravel:扩展已安装的Bundle用户模型

时间:2014-04-18 17:28:57

标签: php laravel-4

我已将Sentinel laravel捆绑包安装到我的项目中。

我已发布了套餐视图,并在注册表单中添加了几个字段。我希望这些字段写入我的users数据库表。

我在捆绑软件目录中的store()文件中找到了SentryUser类的SentryUser.php方法,并看到了这一行:

$user = $this->sentry->register(array('email' => e($data['email']), 'password' => e($data['password'])));

我修改了这个映射以包含我的一个附加字段:

$user = $this->sentry->register(array('email' => e($data['email']), 'password' => e($data['password']), 'first_name' => e($data['first_name']) ));

完全有效。

现在我知道需要传递数据的位置,我想删除这些更改,在我的extendedSentryUser.php目录中创建一个新的app\model文件,并扩展SentryUser

使用Sentinel \ Repo \ User \ SentryUser;

<?php namespace Apps\Models;

use Sentinel\Repo\User\SentryUser;


class extendedSentryUser extends SentryUser {

    protected $sentry;

    /**
     * Construct a new SentryUser Object
     */
    public function __construct(SentryUser $sentry)
    {
        $this->sentry = $sentry;
    }

    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */
    public function store($data)
    {

        $result = array();
        try {
            //Attempt to register the user. 
            $user = $this->sentry->register(array('email' => e($data['email']), 'password' => e($data['password']), 'first_name' => e($data['first_name']) ));

            // Add the new user to the specified default group(s).
            $defaultUserGroups = Config::get('Sentinel::config.default_user_groups');

            foreach ($defaultUserGroups as $groupName) {
                $group = $this->sentry->getGroupProvider()->findByName($groupName);
                $user->addGroup($group);
            }

            //success!
            $result['success'] = true;
            $result['message'] = trans('Sentinel::users.created');
            $result['mailData']['activationCode'] = $user->GetActivationCode();
            $result['mailData']['userId'] = $user->getId();
            // $result['mailData']['first_name'] = e($data['first_name']);
            $result['mailData']['email'] = e($data['email']);
        }
        catch (\Cartalyst\Sentry\Users\LoginRequiredException $e)
        {
            $result['success'] = false;
            $result['message'] = trans('Sentinel::users.loginreq');
        }
        catch (\Cartalyst\Sentry\Users\UserExistsException $e)
        {
            $result['success'] = false;
            $result['message'] = trans('Sentinel::users.exists');
        }

        return $result;
    }
}

我所依赖的是如何让我的应用程序使用此模型而不是现有模型?我是完全错误的道路吗?

1 个答案:

答案 0 :(得分:1)

查看以下文件:/ src / Sentinel / Repo / RepoServiceProvider.php

在文件顶部,将use Sentinel\Repo\User\SentryUser;替换为您自己的类,该类看起来应为use Apps\Models\extendedSentryUser;

然后在第26行,修改代码以改为使用您的类:

// Bind the User Repository
        $app->bind('Sentinel\Repo\User\UserInterface', function($app)
        {
            //change SentryUser to extendedSentryUser
            return new extendedSentryUser(
                $app['sentry']
            );
        });

此外,您可能希望extendedSentryUser的构造函数只通过parent::__construct调用父项的构造。

尚未对此进行测试但应该可行。您可能还需要composer dumpautoload