Question

I am struggling to understand how laravel works and I have a very difficult time with it

Model - User.php the User model

  <?php

 use Illuminate\Auth\UserInterface;
 use Illuminate\Auth\Reminders\RemindableInterface;

 class User extends Eloquent implements UserInterface, RemindableInterface {

protected $fillable = array('email' , 'username' , 'password', 'code');
/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'users';

/**
 * The attributes excluded from the model's JSON form.
 *
 * @var array
 */
protected $hidden = array('password');

public function Characters()
{
      return $this->hasMany('Character');
}

/**
 * Get the unique identifier for the user.
 *
 * @return mixed
 */
public function getAuthIdentifier()
{
    return $this->getKey();
}

/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->password;
}

/**
 * Get the e-mail address where password reminders are sent.
 *
 * @return string
 */
public function getReminderEmail()
{
    return $this->email;
}

}

Model - Character.php the character model

  <?php

   class Character extends Eloquent {

protected $table = 'characters';

protected $fillable = array('lord_id','char_name', 'char_dynasty', 'picture');

public function user()
    {
        return $this->belongsTo('User');
    }

public function Titles()
    {
        return $this->hasMany('Title');
    }
 }

  ?>

routes.php

Route::group(array('prefix' => 'user'), function()
{

    Route::get("/{user}", array(
        'as' => 'user-profile',
        'uses' => 'ProfileController@user'));

});

ProfileController.php

  <?php
  class ProfileController extends BaseController{



public function user($user) {
    $user = User::where('username', '=', Session::get('theuser') );

    $char = DB::table('characters')
            ->join('users', function($join)
            {
                $join->on('users.id', '=', 'characters.user_id')
                     ->where('characters.id', '=', 'characters.lord_id');
            })
            ->get();

    if($user->count()) {
        $user = $user->first();
        return View::make('layout.profile')
        ->with('user', $user)
        ->with('char', $char);
    }

    return App::abort(404);
}


 }

In my code I will redirect to this route with the following:

  return Redirect::route('user-profile', Session::get('theuser'));

In the view I just want to do: Welcome back, {{ $user->username }}, your main character is {{ $char->char_name }}

My problem is that I will receive this error: Trying to get property of non-object in my view. I am sure it is referring to $char->char_name. What's going wrong? I have a very difficult time understanding Laravel. I don't know why. Thanks in advance!

No correct solution

OTHER TIPS

You should be using the Auth class to get the session information for the logged in user.

$user = Auth::user();

$welcome_message = "Welcome back, $user->username, your main character is $user->Character->char_name";

You don't need to pass anything to that route either. Simply check if the user is logged in then retrieve the data. You have access to this data from anywhere in your application.

if (Auth::check())
{
    //the user is logged in
    $user = Auth::user();

To answer your question in the comments, reading the documentation would solve all of these problems, however:

public function user()
{
    if (Auth::check())
    {
        $user = Auth::user();
        return View::make('rtfm', compact('user'));
    }
    else
    {
         return "The documentation explains all of this very clearly.";
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top