我已将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;
}
}
我所依赖的是如何让我的应用程序使用此模型而不是现有模型?我是完全错误的道路吗?
答案 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
。