我在我的网站中定义了一个名为“定义用户”的选项。因此,我需要在当前的laravel注册系统中进行一些更改。其实我做了我所需要的:
@Override
public void onViewStateRestored( @Nullable Bundle savedInstanceState )
{
super.onViewStateRestored( savedInstanceState );
if( savedInstanceState != null )
{
boolean[] groupExpandedArray = savedInstanceState.getBooleanArray( "groupExpandedArray" );
int firstVisiblePosition = savedInstanceState.getInt( "firstVisiblePosition", -1 );
ExpandableListView expandable = getView() instanceof ViewGroup ? getView().findViewById( R.id.expandable ) : null;
if( expandable != null && groupExpandedArray != null )
{
for( int i = 0; i < groupExpandedArray.length; i++ )
{
if( groupExpandedArray[i] )
expandable.expandGroup( i );
}
if( firstVisiblePosition >= 0 )
expandable.setSelection( firstVisiblePosition );
}
}
}
如您所知,上面的函数位于public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
if ( !isset($request->registered_by_id) ) { -- added
$this->guard()->login($user);
$status = ""; -- added
$msg = ""; -- added
} else { -- added
$status = "define-user-alert-success"; -- added
$msg = "the user registered successfully";
} -- added
return $this->registered($request, $user)
?: redirect($this->redirectPath())
->with($status, $msg); -- added
}
路径下。问题是,当我上载网站并执行/vendor/laravel/framework/src/illuminate/Foundation/Auth/RegisterUsers.php
命令时,我所做的所有更改都将被忽略。
您知道如何将所做的更改保存在composer install
目录中吗?
答案 0 :(得分:1)
composer install
将覆盖您所做的更改,因为它只是从公共存储库中获取最新版本并进行安装。
我建议以下其中一项;
创建您自己的laravel分支,并让作曲家将其加载到默认laravel之上。我最近用Symfony组件fork进行了此操作,其想法是将repo分支名称更改为修改后的分支名称,并使用您自己的repo覆盖源。 Instruction from my fork are here。
执行composer install
后,通过手动上传文件(不推荐,仅使用权宜之计)。
根据this answer on Laracasts中的定义(与您的情况非常相似),在用户注册后使用事件监听器执行代码。
希望这会有所帮助!
答案 1 :(得分:1)
是的,不要编辑vendor
中的文件。
此trait
用于应用程序中的RegisterController
,而不是框架中。您只需在控制器中重写该方法即可。
也许您的更改可以在注册后调用的registered
中进行,所以您不必覆盖register
本身的此功能(因为registered
是一个空白的方法,等待您覆盖)
答案 2 :(得分:0)
我强烈建议您不要对核心框架进行任何更改-除了您提到的问题之外,它还会使升级变得极为困难。
幸运的是,Laravel使用户注册变得容易。您需要做的就是创建一个新的控制器(例如UserController),然后使用类似的函数为其创建模型...
public function registerUser(Request $request){
$request->validate([
'username' => 'bail|required|unique:users,username|max:255',
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|email'
]);
$user = User::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'username' => $request->username,
'password' => Hash::make($request->password),
'email' => $request->email
]);
return redirect('/settings/people/'.$user->user_id);
}
此处的关键是在将模型提交到数据库之前,使用哈希外观对密码进行加密。否则,本质上就像使用任何其他模型一样。