A controller で B modelで定義された特定のメソッドを利用したい
のですが、
どなたかご存知の方がいらっしゃればご教示いただけないでしょうか!!
よろしくお願いします!皆さんのお力添えをー!
【確認したこと】
AController上のnamespaceに誤りがないことを確認しました。
public function login内の以下のif文でuser情報が取得できていることを確認しました。
if ($user = app('auth')->getProvider()->retrieveByCredentials($request->only('email', 'password')))
AControllerファイル内の以下の処理でBModel内のpublic function user()は参照ができていることを確認しました。
if(! $token->user()){ echo "user()メソッドは参照できていないよ"; }else{ echo "user()メソッドは参照できているよ"; }
==============================BModel==============================
BModel
1<?php 2namespace App; 3use Carbon\Carbon; 4use Illuminate\Database\Eloquent\Model; 5 6 7class Token extends Model 8{ 9 10 public function user() 11 { 12 return $this->belongsTo(User::class); 13 } 14 // このメソッドをA Controllerで使用したい!! 15 public function sendCode() 16 { 17 if (! $this->user) { 18 throw new \Exception("No user attached to this token."); 19 20 } 21 if (! $this->code) { 22 $this->code = $this->generateCode(); 23 } 24 try { 25 // 例外が発生するおそれがあるコード 26 app('twilio')->messages->create($this->user->getPhoneNumber(), 27 ['from' => env('TWILIO_NUMBER'), 'body' => "Your verification code is {$this->code}"]); 28 } catch (\Exception $ex) { 29 // 例外が発生した場合 30 return false; //enable to send SMS 31 } 32 return true; 33 } 34 35}
============================AController============================
AController
1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Http\Controllers\Controller; 6use App\Token; 7use Illuminate\Foundation\Auth\AuthenticatesUsers; 8use Illuminate\Http\Request; 9use Illuminate\Support\Facades\Lang; 10 11class LoginController extends Controller 12{ 13 14 use AuthenticatesUsers; 15 16 public function login(Request $request) 17 { 18 19 $this->validateLogin($request); 20 // プロバイダのretrieveByCredentials()でDBからユーザー情報を取得しています。 21 if ($user = app('auth')->getProvider()->retrieveByCredentials($request->only('email', 'password'))) { 22 23 $token = Token::create([ 24 'user_id' => $user->id 25 ]); 26 27 if(! $token->user()){ 28 echo "user()メソッドは参照できていないよ"; 29 }else{ 30 echo "user()メソッドは参照できているよ"; 31 } 32 33 // sendCodeをここで利用したい!!! 34 if ($token->sendCode()) { 35 session()->set("token_id", $token->id); 36 session()->set("user_id", $user->id); 37 session()->set("remember", $request->get('remember')); 38 return redirect("code"); 39 } 40 $token->delete();// delete token because it can't be sent 41 return redirect('/login')->withErrors([ 42 "Unable to send verification code" 43 ]); 44 } 45 return redirect()->back() 46 ->withInputs() 47 ->withErrors([ 48 $this->username() => Lang::get('auth.failed'), 49 ]); 50 } 51 52}
回答1件
あなたの回答
tips
プレビュー