2016-04-24 4 views
0

Я хочу, чтобы пользователь зарегистрировался, а также приобрел пакет. Для этого я сделал ввод для регистрационных данных и деталей пакета. Теперь, когда я обрабатываю заказ для сохранения данных пакета в сеансе и регистрации, я получаю эту ошибку: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of Illuminate\View\View given, called in C:\xampp\htdocs\rename\app\Traits\OrderRegister.php on line 63 and defined. Я использую черту, чтобы зарегистрировать пользователя и вернуться к выполнению, когда регистрация завершена.ОшибкаException в SessionGuard.php | Ошибка при попытке зарегистрировать пользователя при создании нового заказа

OrderController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use App\Package; 
use App\ListingType; 
use Illuminate\Support\Facades\Auth; 
use App\Order; 
use Carbon\Carbon; 
use App\Traits\OrderRegister; 


class OrderController extends Controller 
{ 
    use OrderRegister; 


    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index($type) 
    { 
     $listingtype = ListingType::where('type', '=', $type)->first(); 
     if ($listingtype) { 
      $packages = $listingtype->packages()->get(); 
      return view('packages.index', compact('packages')); 
     } 
    } 

    /** 
    * Show the form for creating a new resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function create($id) 
    { 
     $package = Package::where('id', '=', $id)->first(); 
     if (Auth::check()) { 
      return view('order.create_loggedin', compact('package')); 
     } 
     else { 
      return view('order.create_register', compact('package')); 
     } 
    } 

    /** 
    * Process a new order request. Store order values in session. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function process(Request $request) 
    { 
     $order = ['package_id' => $request->package_id, 'order_qty' => $request->no_of_listing]; 
     session(['order' => $order]); 
     if (Auth::guest()) { 

      return $this->register($request); // need to check session for orders available in OrderRegister trait. 
     } 
     return $this->store($request); 
    } 

    /** 
    * Store a newly created resource in storage. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function store(Request $request) 
    { 

     if($request->session()->has('order')) { 
      $package = Package::where('id', '=', $request->package_id)->first(); 
      if($request->user() == Auth::user()) { 

       for($n=1;$n<=$request->no_of_listing;$n++) { 
        $order = new Order; 
        $order->package_id = $request->package_id; 
        $order->user_id = Auth::user()->id; 
        $order->expire_at = Carbon::now()->modify('+'.$package->duration_in_months.' months'); 
        $order->save(); 
       } 

       return redirect('/'); 
      } 
     } 

    } 


    /** 
    * Display the specified resource. 
    * 
    * @param int $id 
    * @return \Illuminate\Http\Response 
    */ 
    public function show($id) 
    { 
     // 
    } 

    /** 
    * Show the form for editing the specified resource. 
    * 
    * @param int $id 
    * @return \Illuminate\Http\Response 
    */ 
    public function edit($id) 
    { 
     // 
    } 

    /** 
    * Update the specified resource in storage. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param int $id 
    * @return \Illuminate\Http\Response 
    */ 
    public function update(Request $request, $id) 
    { 
     // 
    } 

    /** 
    * Remove the specified resource from storage. 
    * 
    * @param int $id 
    * @return \Illuminate\Http\Response 
    */ 
    public function destroy($id) 
    { 
     // 
    } 
} 

черта: OrderRegister.php

<?php 

namespace App\Traits; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use Validator; 

trait OrderRegister 
{ 
    use RedirectsUsers; 

    /** 
    * 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', 
      'username' => 'required|max:255|unique:users', 
      'password' => 'required|min:6|confirmed', 
     ]); 
    } 

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

     $user->profile()->save(new UserProfile); 
     return $user; 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function register(Request $request) 
    { 
     $validator = $this->validator($request->all()); 

     if ($validator->fails()) { 
      $this->throwValidationException(
       $request, $validator 
      ); 
     } 

     Auth::guard($this->getGuard())->login($this->create($request->all())); 

     return $this->store($request); 
    } 

    /** 
    * Get the guard to be used during registration. 
    * 
    * @return string|null 
    */ 
    protected function getGuard() 
    { 
     return property_exists($this, 'guard') ? $this->guard : null; 
    } 
} 

я не смог найти решение этой ошибки поэтому создал свою собственную нить в первый раз, пожалуйста, кто-то Помогите.

ответ

0

Он выдает сообщение об ошибке, потому что вы пытаетесь сделать login a vue.

Вы используете create метод, который возвращает представление. этот метод переопределит метод create по вашему признаку.

Так у вас есть что-то вроде этого:

Auth::guard($this->getGuard())->login(/* A view */); 

вы можете по крайней мере переименовывать метод на черта из create в createUser, например.

затем вы называете его от охранника, как это:

Auth::guard($this->getGuard())->login($this->createUser($request->all())); 
+0

Благодаря @zorx, что ответ работал для меня. Я знаю, что в моем коде были и другие ошибки, но я исправил их, и теперь он работает отлично. –

Смежные вопросы