CallMeRev's avatar

Laravel Casher with Braintree : Error Call to a member function cancel() on null

Hello , im quite new with laravel . and im currently setting up a products / plans site im trying to make a user be able to cancel his subscription but $user->subscription($braintree_id)->cancel(); gives me this error

User.php (Modal)

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Cashier\Billable;

class User extends Authenticatable
{
    use Notifiable, Billable;

    protected $fillable = [
          'name', 'email', 'password', 'country', 'city', 'avatar', 'role_id', 'braintree_id', 'paypal_email', 'card_brand', 'card_last_four', 'trial_ends_at'
    ];

    // public function subscription()
    // {
    //     return $this->hasMany('App\Subscription');
    // }

 
    protected $hidden = [
        'password', 'remember_token',
    ];
}

Subscription.php (Modal)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use BraintreeSubscription;

class Subscription extends Model
{
  protected $fillable = ['user_id ', 'category_id', 'braintree_id', 'name','braintree_plan', 'quantity', 'trial_ends_at', 'ends_at'];

  public function product()
  {
      return $this->hasOne('App\Product');
  }

  public function config()
  {
      return $this->hasOne('App\Config');
  }

 //  public function user()
 // {
 //     return $this->belongsTo('App\User'); //, 'user_id'
 // }
}

Controller


<?php

namespace App\Http\Controllers;

use App\User;
use App\Subscription;
use App\Product;
use App\Config;
use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;


class ManagerController extends Controller
{
  public function __construct()
{
   $this->middleware('auth');
}
    public function getIndex()
  {
    $user = Auth::user();
    return view('manager.index', compact('user'));
  }

    public function getProfile()
  {
    $user = Auth::user();
    return view('manager.profile', compact('user'));
  }


    public function getServices()
  {
   $user = Auth::user();
   $orders = Subscription::where('user_id', '=', $user->id)->get();
   return view('manager.index', compact('orders' , 'user_id', 'user', 'product', 'braintree_plan', 'config'));
  }

  public function getManagement($id)
  {
    $user = Auth::user();
    $order = Subscription::find($id);
    $config = Config::find(1);
    return view('manager.manage', compact('user', 'config', 'order'));
  }
  
  public function getCancellation($braintree_id)
{
  $user = Auth::user();
  // dd($braintree_id);
  $user->subscription($braintree_id)->cancel();
  return view('features', compact('user', 'braintree_id'));
}

}

User Controller

<?php

namespace App\Http\Controllers;

use App\User;
use App\Category;
use App\Subscription;
use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Session;
use Image;

class UserController extends Controller
{

    public function getSignup()
    {
        return view('user.signup');
    }

    public function postSignup(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'email|required|unique:users',
            'password' => 'required|min:6',
            'country' => 'required',
            'city' => 'required',
        ]);

        $user = new User([
            'name' => $request->input('name'),
            'email' => $request->input('email'),
            'password' => bcrypt($request->input('password')),
            'country' => $request->input('country'),
            'city' => $request->input('city')
        ]);
        $user->save();

        Auth::login($user);

        if (Session::has('oldUrl')) {
            $oldUrl = Session::get('oldUrl');
            Session::forget('oldUrl');
            return redirect()->to($oldUrl);
        }

        return redirect()->route('manager.profile.getEdit', Auth::user()->name);
    }

    public function getSignin()
    {
        return view('user.signin');
    }

    public function postSignin(Request $request)
    {
        $this->validate($request, [
            'email' => 'email|required',
            'password' => 'required|min:6'
        ]);

        if (Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password')])) {
            if (Session::has('oldUrl')) {
                $oldUrl = Session::get('oldUrl');
                Session::forget('oldUrl');
                return redirect()->to($oldUrl);
            }
            return redirect()->route('manager.index');
        }
        return redirect()->back();
    }

    // edit user (copied from movie project)
    public function getEdit($name) {
        $user = User::whereName($name)->firstorFail();
        if($user != null)
          return view('manager.profile', ['user' => $user]);
          return redirect(route('manager.profile.getEdit'))
    ->with('error', "User not found!");
    }

    public function update_avatar(Request $request){
      $user = Auth::user();
     // Handle the user upload of avatar
     if($request->hasFile('avatar')){
       $avatar = $request->file('avatar');
       $filename  = 'avatar.' . $avatar->getClientOriginalExtension();
       $path = public_path('images/avatars/' . $user->name);
       if(!file_exists($path))
   {
     if(!mkdir($path, 0777))
     {
       return redirect(route('manager.profile.getEdit', $user->name))
       ->withErrors(['An error occured!'])
       ->withInput();
     }
   }
       Image::make($avatar)->resize(256, 256)->save($path.'/'.$filename );
       $user = Auth::user();
       $user->avatar = ('images/avatars/' . $user->name. '/' .$filename);
       $user->save();
     }
     return redirect()->route('manager.profile.getEdit', $user->name);
     return route('manager.profile.getEdit, $user->name', array('user' => Auth::user()) )
      ->with('success', "The avatar was updated successfully");
    }


    public function postEdit(Request $request, $name)
{
  if($request->get('password')) {
      $this->validate($request, [
      'email' => 'required|max:255',
      'password' => 'required|confirmed|min:6'
    ]);
  } else {
      $this->validate($request, [
      'email' => 'required|max:255|email'
    ]);
  }


  $user = User::whereName($name)->firstorFail();
  if($user == null) {
    return redirect('index')
      ->with('error', "The user doesn't exist!");
  }
  $user->email = $request->get('email');
  if($request->get('password')) {
    $user->password = bcrypt($request->get('password'));
  }

  if(!$user->save()) {
    return redirect(route('manager.profile.getEdit', $name))
      ->withErrors(['An error occured'])
      ->withInput();
  }

  return redirect(route('manager.profile.getEdit', $name))
    ->with('success', "The user was updated successfully");
}


    public function getLogout() {
        Auth::logout();
        return redirect()->route('user.signin');
    }
}
0 likes
0 replies

Please or to participate in this conversation.