Php 在laravel中注册后保存到数据库不会';行不通

Php 在laravel中注册后保存到数据库不会';行不通,php,laravel,orm,Php,Laravel,Orm,我正试图在每个用户在基于最新laravel的应用程序中注册后立即将名为resources的内容保存到数据库中 据我所知,最好的方法是中的register方法 所以我在那里添加了construct方法并注入了resourcesService,其中包含createResources方法,并将其保存到数据库中 不幸的是,这个应用程序没有保存任何东西,它甚至没有给我任何错误,所以我不知道出了什么问题 请让我知道你的想法 RegistersUsers.php: namespace Illuminate\F

我正试图在每个用户在基于最新laravel的应用程序中注册后立即将名为
resources
的内容保存到数据库中


据我所知,最好的方法是
中的
register
方法

所以我在那里添加了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)
    {
        //
    }
}
resourcesService.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']),
        ]);
    }
}

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

protected function registered( Request $request, $user )
{
    // call your service here.
}
并将其注入控制器的构造函数中,而不是trait的构造函数中

从您的服务中,我注意到:

$resources = new $this->resource;

// change it to this:

$resource = new Resource;

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

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

protected function registered( Request $request, $user )
{
    // call your service here.
}
并将其注入控制器的构造函数中,而不是trait的构造函数中

从您的服务中,我注意到:

$resources = new $this->resource;

// change it to this:

$resource = new Resource;


并删除依赖项注入,因为我认为这毫无意义。

“据我所知,最好的方法是在…/vendor/laravel/framework/src/illumb/Foundation/Auth/RegistersUsers.php中注册方法”。不,您不应该触碰/vendor文件夹中的任何内容。将vendor文件夹视为只读源,更改其中的任何内容是非常糟糕的做法。如果composer更新没有任何反馈,更改可能会丢失。我遵循您提供的链接,但它指向App/Http/Controllers/Auth/RegisterControllerok,没问题,每天我们都可以学到一些东西。这是你想要实现的目标的答案。你不担心吗?我不知道我像你一样在做什么,只是多一点经验,那就是我已经弄乱了供应商文件夹,并承担了后果;)“据我所知,最好的方法是在…/vendor/laravel/framework/src/illighte/Foundation/Auth/RegistersUsers.php中注册方法”。不,您不应该触碰/vendor文件夹中的任何内容。将vendor文件夹视为只读源,更改其中的任何内容是非常糟糕的做法。如果composer更新没有任何反馈,更改可能会丢失。我遵循您提供的链接,但它指向App/Http/Controllers/Auth/RegisterControllerok,没问题,每天我们都可以学到一些东西。这是你想要实现的目标的答案。你不担心吗?我不知道我像你一样在做什么,只是多一点经验,那就是我已经弄乱了供应商文件夹,并承担了后果;)谢谢你的回答!不幸的是,只有
create()
方法返回如下内容
returnusers:create(['name'=>$data['name'],…])
我会尝试编辑它,但会看到发生了什么hahaI不明白你的意思。因为我在上面展示的
$user
方法中作为参数传递的
$user
是新创建的
$user
实例,所以您可以使用它。我的意思是RegisterController没有您提到的方法。我正在上面的编辑中附加控制器。@divHelper11您需要在您的
RegisterController
中添加
registered
方法。该方法存在于trait中,因此您在控制器中重写该方法。它将从trait调用,不必担心,只需添加它:)该方法来自
注册表用户
trait,仅供参考。感谢您的回答!不幸的是,只有
create()
方法返回如下内容
returnusers:create(['name'=>$data['name'],…])
我会尝试编辑它,但会看到发生了什么hahaI不明白你的意思。因为我在上面展示的
$user
方法中作为参数传递的
$user
是新创建的
$user
实例,所以您可以使用它。我的意思是RegisterController没有您提到的方法。我正在上面的编辑中附加控制器。@divHelper11您需要在您的
RegisterController
中添加
registered
方法。该方法存在于trait中,因此您在控制器中重写该方法。它将从trait调用,不用担心,只需添加它:)该方法来自
RegistersUsers
trait,仅供参考。