首页 > 解决方案 > 在 laravel 中注册后保存到数据库不起作用

问题描述

我正在尝试resources根据最新的 laravel 在每个用户在我的应用程序中注册后立即将调用的内容保存到数据库中。

据我所知,最好的register方法是在.../vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php.

所以我在那里添加了 __construct 方法和注入resourcesService,其中包含createResources将其保存到数据库的方法。

不幸的是,该应用程序没有保存任何内容,它甚至没有给我任何错误,所以我不明白出了什么问题。

请让我知道你在想什么。

RegistersUsers.php:

namespace Illuminate\Foundation\Auth;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Registered;
use App\Http\Services\resourcesService;

trait RegistersUsers
{
    public $resourcesService;

    public function __construct(resourcesService $resourcesService)
    {
        $this->resourcesService = $resourcesService;
    }

    use RedirectsUsers;

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        return view('auth.register');
    }

    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        $this->resourcesService->createResources();

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

    /**
     * Get the guard to be used during registration.
     *
     * @return \Illuminate\Contracts\Auth\StatefulGuard
     */
    protected function guard()
    {
        return Auth::guard();
    }

    /**
     * The user has been registered.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
    protected function registered(Request $request, $user)
    {
        //
    }
}

资源服务.php

namespace App\Http\Services;

use App\Resource;
use Auth;

class resourcesService
{

    public $resource;

    public function __construct(Resource $resource)
    {
        $this->resource = $resource;
    }


    public function getResources()
    {
        $resources = $this->resource::where("user_id", Auth::id())->first();
        return $resources;
    }


    public function createResources()
    {
        $resources = new $this->resource;
        $resources->user_id = Auth::id();
        $resources->wood = 0;
        $resources->stone = 0;
        $resources->food = 0;
        $resources->gold = 0;
        $resources->souls = 0;
        $resources->save();
    }
}

编辑: 注册控制器

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}

标签: phplaravelorm

解决方案


在您RegisterController中,您可以覆盖在registered用户成功注册后立即调用的方法:

protected function registered( Request $request, $user )
{
    // call your service here.
}

并将其注入控制器的构造函数而不是特征。

同样从您的服务中,我注意到了这一点:

$resources = new $this->resource;

// change it to this:

$resource = new Resource;

并删除依赖注入,因为我相信它没有意义。


推荐阅读