質問編集履歴
6
説明に追記を入れました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
PHP Laravel 6.20.35にてマッチングサイトを制作しています。
|
2
2
|
|
3
|
-
新規登録時に画像の登録がなければ、デフォルトの画像をユーザー画像として登録したいです。
|
3
|
+
新規登録時に画像の登録がなければ、デフォルトの画像をユーザー画像として登録したいのですが、画像登録無しで新規登録を行うと「Undefined index: img_name」となります。
|
4
4
|
|
5
5
|
現状は以下のようになっています。
|
6
6
|
|
@@ -105,9 +105,9 @@
|
|
105
105
|
としている箇所を
|
106
106
|
|
107
107
|
```PHP
|
108
|
-
$table->string('img_name')->default('
|
108
|
+
$table->string('img_name')->default('/storage/images/no_img.png');
|
109
109
|
```
|
110
|
-
とすれば、画像登録なしで新規登録した場合でも 「default('
|
110
|
+
とすれば、画像登録なしで新規登録した場合でも 「default('/storage/images/no_img.png');」 が登録できると思い
|
111
111
|
|
112
112
|
新規マイグレーションファイルを作成
|
113
113
|
```PHP
|
@@ -120,7 +120,7 @@
|
|
120
120
|
```PHP
|
121
121
|
<label for="file_photo" class="rounded-circle userProfileImg">
|
122
122
|
<div class="userProfileImg_description">画像をアップロード</div>
|
123
|
-
<img src="/storage/images/no_img.png"alt="
|
123
|
+
<img src="/storage/images/no_img.png"alt="デフォルト画像">
|
124
124
|
<input type="file" id="file_photo" name="img_name">
|
125
125
|
</label>
|
126
126
|
```
|
5
説明を修正。編集。
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,43 +2,18 @@
|
|
2
2
|
|
3
3
|
新規登録時に画像の登録がなければ、デフォルトの画像をユーザー画像として登録したいです。
|
4
4
|
|
5
|
-
元々は「2021_10_10_135024_add_column_to_users_table.php」に
|
6
|
-
```PHP
|
7
|
-
|
5
|
+
現状は以下のようになっています。
|
8
|
-
{
|
9
|
-
Schema::table('users', function (Blueprint $table) {
|
10
|
-
$table->string('self_introduction', 500)->nullable(); //詳細情報
|
11
|
-
$table->tinyInteger('sex')->default(0); //性別
|
12
|
-
$table->string('img_name')->default(''); //画像ファイル
|
13
|
-
});
|
14
|
-
}
|
15
|
-
```
|
16
6
|
|
17
|
-
としていた為に、画像を登録せずにアカウントを作成すると、
|
18
|
-
RegisterController.phpで「Undefined index: img_name」というエラーが出る状況でした。
|
19
7
|
|
20
|
-
|
8
|
+
RegisterController.php
|
21
|
-
|
22
9
|
```PHP
|
23
|
-
public function up()
|
24
|
-
{
|
25
|
-
Schema::table('users', function (Blueprint $table) {
|
26
|
-
//
|
27
|
-
$table->string('img_names')->default('/storage/images/no_img.png'); //デフォルト画像セット
|
28
|
-
});
|
29
|
-
}
|
30
|
-
```
|
31
|
-
としました。
|
32
|
-
ここで、「php artisan migrate」を行いました。
|
33
|
-
|
34
|
-
RegisterController.phpを下記にしています。
|
35
|
-
```PHP
|
36
10
|
protected function create(array $data)
|
37
11
|
{
|
12
|
+
|
13
|
+
// ---ここから追加---
|
14
|
+
//引数 $data から name='img_name'を取得(アップロードするファイル情報)
|
15
|
+
$imageFile = $data['img_name'];
|
38
16
|
|
39
|
-
//引数 $data から name='img_names'を取得(アップロードするファイル情報)
|
40
|
-
$imageFile = $data['img_names'];
|
41
|
-
|
42
17
|
//$imageFileからファイル名を取得(拡張子あり)
|
43
18
|
$filenameWithExt = $imageFile->getClientOriginalName();
|
44
19
|
|
@@ -84,36 +59,84 @@
|
|
84
59
|
'password' => Hash::make($data['password']),
|
85
60
|
'self_introduction' => $data['self_introduction'],
|
86
61
|
'sex' => $data['sex'],
|
87
|
-
'
|
62
|
+
'img_name' => $fileNameToStore,
|
88
63
|
]);
|
89
64
|
}
|
90
65
|
```
|
91
66
|
|
92
|
-
|
67
|
+
add_column_to_users_table.phpを
|
93
68
|
```PHP
|
94
|
-
|
69
|
+
public function up()
|
70
|
+
{
|
71
|
+
Schema::table('users', function (Blueprint $table) {
|
72
|
+
$table->string('self_introduction', 500)->nullable(); //詳細情報
|
73
|
+
$table->tinyInteger('sex')->default(0); //性別
|
95
|
-
|
74
|
+
$table->string('img_name')->default(''); //画像ファイル
|
96
|
-
|
75
|
+
});
|
76
|
+
}
|
97
77
|
```
|
98
78
|
|
99
|
-
register.blade.phpを
|
79
|
+
viewファイルregister.blade.phpを
|
100
80
|
```PHP
|
101
81
|
<label for="file_photo" class="rounded-circle userProfileImg">
|
102
|
-
<div class="userProfileImg_description
|
82
|
+
<div class="userProfileImg_description">画像をアップロード</div>
|
103
|
-
<i class="fas fa-camera fa-3x
|
83
|
+
<i class="fas fa-camera fa-3x"></i>
|
104
|
-
<input type="file" id="file_photo" name="
|
84
|
+
<input type="file" id="file_photo" name="img_name">
|
105
|
-
<img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-image">
|
106
85
|
</label>
|
107
86
|
```
|
108
87
|
|
88
|
+
User.php
|
89
|
+
```PHP
|
90
|
+
protected $fillable = [
|
91
|
+
'name', 'email', 'password', 'self_introduction', 'sex', 'img_name',
|
92
|
+
];
|
93
|
+
```
|
109
94
|
|
110
|
-
|
95
|
+
としていました。
|
111
|
-
<img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-image">
|
112
96
|
|
113
|
-
|
97
|
+
この状況だと画像登録なしで新規登録すると、「Undefined index: img_name」 というエラーになります。
|
114
98
|
|
115
99
|
|
100
|
+
|
101
|
+
マイグレーションファイルadd_column_to_users_table.php で
|
102
|
+
```PHP
|
103
|
+
'img_name' => $fileNameToStore,
|
104
|
+
```
|
105
|
+
としている箇所を
|
106
|
+
|
107
|
+
```PHP
|
108
|
+
$table->string('img_name')->default('画像パス');
|
109
|
+
```
|
110
|
+
とすれば、画像登録なしで新規登録した場合でも 「default('画像パス');」 が登録できると思い
|
111
|
+
|
116
|
-
|
112
|
+
新規マイグレーションファイルを作成
|
113
|
+
```PHP
|
114
|
+
$table->string('default_img')->default('/storage/images/no_img.png');
|
115
|
+
```
|
116
|
+
と設定
|
117
|
+
|
118
|
+
viewファイルregister.blade.php
|
119
|
+
|
120
|
+
```PHP
|
121
|
+
<label for="file_photo" class="rounded-circle userProfileImg">
|
122
|
+
<div class="userProfileImg_description">画像をアップロード</div>
|
117
|
-
<img src="/storage/images/no_img.png"
|
123
|
+
<img src="/storage/images/no_img.png"alt="サムネイル">
|
124
|
+
<input type="file" id="file_photo" name="img_name">
|
118
|
-
|
125
|
+
</label>
|
126
|
+
```
|
127
|
+
RegisterController.phpを以下のように修正しました。
|
128
|
+
```PHP
|
129
|
+
//createメソッドでユーザー情報を作成
|
130
|
+
return User::create([
|
131
|
+
'name' => $data['name'],
|
132
|
+
'email' => $data['email'],
|
133
|
+
'password' => Hash::make($data['password']),
|
134
|
+
'self_introduction' => $data['self_introduction'],
|
135
|
+
'sex' => $data['sex'],
|
136
|
+
'img_name' => $fileNameToStore,
|
137
|
+
'default' => $data['/storage/images/no_img.png'],
|
138
|
+
```
|
139
|
+
|
140
|
+
しかし、これでも画像登録なしで新規登録した場合「Undefined index: img_name」 というエラーが表示されます。
|
141
|
+
|
119
|
-
|
142
|
+
どうすれば、新規登録時に画像の登録がなければデフォルトの画像を設定できるようにできるでしょうか?
|
4
誤字修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -36,8 +36,8 @@
|
|
36
36
|
protected function create(array $data)
|
37
37
|
{
|
38
38
|
|
39
|
-
//引数 $data から name='
|
39
|
+
//引数 $data から name='img_names'を取得(アップロードするファイル情報)
|
40
|
-
$imageFile = $data['
|
40
|
+
$imageFile = $data['img_names'];
|
41
41
|
|
42
42
|
//$imageFileからファイル名を取得(拡張子あり)
|
43
43
|
$filenameWithExt = $imageFile->getClientOriginalName();
|
@@ -84,7 +84,7 @@
|
|
84
84
|
'password' => Hash::make($data['password']),
|
85
85
|
'self_introduction' => $data['self_introduction'],
|
86
86
|
'sex' => $data['sex'],
|
87
|
-
'
|
87
|
+
'img_names' => $fileNameToStore,
|
88
88
|
]);
|
89
89
|
}
|
90
90
|
```
|
3
テキスト修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -35,28 +35,57 @@
|
|
35
35
|
```PHP
|
36
36
|
protected function create(array $data)
|
37
37
|
{
|
38
|
-
//Intervention Imageでプロフィール画像をリサイズ
|
39
|
-
$imageFile = $data['img_names'];
|
40
38
|
|
39
|
+
//引数 $data から name='img_name'を取得(アップロードするファイル情報)
|
41
|
-
$
|
40
|
+
$imageFile = $data['img_name'];
|
42
41
|
|
42
|
+
//$imageFileからファイル名を取得(拡張子あり)
|
43
|
+
$filenameWithExt = $imageFile->getClientOriginalName();
|
44
|
+
|
45
|
+
//拡張子を除いたファイル名を取得
|
46
|
+
$fileName = pathinfo($filenameWithExt, PATHINFO_FILENAME);
|
47
|
+
|
48
|
+
//拡張子を取得
|
43
|
-
|
49
|
+
$extension = $imageFile->getClientOriginalExtension();
|
50
|
+
|
44
|
-
|
51
|
+
// ファイル名_時間_拡張子 として設定
|
52
|
+
$fileNameToStore = $fileName.'_'.time().'.'.$extension;
|
53
|
+
|
54
|
+
//画像ファイル取得
|
55
|
+
$fileData = file_get_contents($imageFile->getRealPath());
|
56
|
+
|
57
|
+
//拡張子ごとに base64エンコード実施
|
58
|
+
if ($extension = 'jpg'){
|
45
|
-
$data_url =
|
59
|
+
$data_url = 'data:image/jpg;base64,'. base64_encode($fileData);
|
46
|
-
|
60
|
+
}
|
61
|
+
|
62
|
+
if ($extension = 'jpeg'){
|
63
|
+
$data_url = 'data:image/jpg;base64,'. base64_encode($fileData);
|
64
|
+
}
|
65
|
+
|
66
|
+
if ($extension = 'png'){
|
67
|
+
$data_url = 'data:image/png;base64,'. base64_encode($fileData);
|
68
|
+
}
|
69
|
+
|
70
|
+
if ($extension = 'gif'){
|
71
|
+
$data_url = 'data:image/gif;base64,'. base64_encode($fileData);
|
72
|
+
}
|
73
|
+
|
74
|
+
//画像アップロード(Imageクラス makeメソッドを使用)
|
47
75
|
$image = Image::make($data_url);
|
76
|
+
|
48
|
-
|
77
|
+
//画像を横400px, 縦400pxにリサイズし保存
|
49
78
|
$image->resize(400,400)->save(storage_path() . '/app/public/images/' . $fileNameToStore );
|
79
|
+
|
50
|
-
|
80
|
+
//createメソッドでユーザー情報を作成
|
51
81
|
return User::create([
|
52
82
|
'name' => $data['name'],
|
53
83
|
'email' => $data['email'],
|
54
84
|
'password' => Hash::make($data['password']),
|
55
85
|
'self_introduction' => $data['self_introduction'],
|
56
86
|
'sex' => $data['sex'],
|
57
|
-
'
|
87
|
+
'img_name' => $fileNameToStore,
|
58
88
|
]);
|
59
|
-
|
60
89
|
}
|
61
90
|
```
|
62
91
|
|
2
テキスト修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,8 +29,9 @@
|
|
29
29
|
}
|
30
30
|
```
|
31
31
|
としました。
|
32
|
+
ここで、「php artisan migrate」を行いました。
|
32
33
|
|
33
|
-
RegisterController.php
|
34
|
+
RegisterController.phpを下記にしています。
|
34
35
|
```PHP
|
35
36
|
protected function create(array $data)
|
36
37
|
{
|
@@ -59,7 +60,7 @@
|
|
59
60
|
}
|
60
61
|
```
|
61
62
|
|
62
|
-
User.phpに'img_names'を追加しました。
|
63
|
+
User.php、$fillableに'img_names'を追加しました。
|
63
64
|
```PHP
|
64
65
|
protected $fillable = [
|
65
66
|
'name', 'email', 'password', 'self_introduction', 'sex', 'img_names',
|
1
テキスト修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -84,5 +84,6 @@
|
|
84
84
|
|
85
85
|
|
86
86
|
どうすれば、新規登録時に画像の登録がなければ
|
87
|
-
<img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-
|
87
|
+
<img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-imag
|
88
|
+
e">
|
88
89
|
をプロフィール画像として登録できるでしょうか?
|