31146


Laravelを利用したシステムのユーザ登録時に併せてユーザのアイコンを登録したいと考えています。  
public/image/$idといった感じで、アイコン登録時にidと同一のフォルダを作成し、そちらに画像ファイルを格納する、という処理を行いたいのですが、idと同一のフォルダを作成する方法が不明です。  
Controllerは以下のように、public/imagesに画像格納できる段階までは出来ています。

[code]

    <?php
    
    namespace App\Http\Controllers\Auth;
    
    use App\User;
    use Validator;
    use Image;
    use App\Http\Controllers\Controller;
    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 login / 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|max:255',
                'email' => 'required|email|max:255|unique:users',
                'image' => 'image',
                'profile' => 'max:255',
                'password' => 'required|min:6|confirmed',
            ]);
        }
    
        /**
         * Create a new user instance after a valid registration.
         *
         * @param  array  $data
         * @return User
         */
        protected function create(array $data){
            $fileName = $data['image']->getClientOriginalName();
    
            $image = Image::make($data['image']->getRealPath());
    
            $path = public_path() . '/images/';
    
            $image->save($path . $fileName);
    
            return User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'image' => $data['image'],
                'profile' => $data['profile'],
                'password' => bcrypt($data['password']),
            ]);
        }
    }
    
[/code]


CC BY-SA 3.0
2016-12-13T07:00:16.387
31112
2016-12-14T06:22:09.927
2016-12-13T07:36:45.087
19780
19780
question
php laravel laravel-5
Laravel5.3のユーザ登録時の画像格納&フォルダ作成について


create() を行うまで User の id は確定しないので、まずは image を空欄のまま User を作成しておき、後から save() で
image を書き換える形になるかと思います。

[code]

    $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'image' => null,
            'profile' => $data['profile'],
            'password' => bcrypt($data['password']),
        ]);
    
    $fileName = $data['image']->getClientOriginalName();
    $image = Image::make($data['image']->getRealPath());
    $path = public_path(sprintf('image/%d/%s', $user->id, $fileName));
    $dir = dirname($path);
    mkdir($dir, 0777, true);
    $image->save($path);
    $user->image = $path;
    $user->save();
    
    return $user;
    
[/code]


CC BY-SA 3.0
2016-12-14T06:22:09.927
31146
2016-12-14T06:22:09.927
10083
31112
answer