Feb 5, 2017
0
Level 1
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');
}
}
Please or to participate in this conversation.