[英]Trying to get property 'title' of non-object Laravel 5.8 Error
I'm new to Laravel and trying to create my first project.我是 Laravel 的新手,正在尝试创建我的第一个项目。 In this project, I've made a page where users can Login to their account and upload a new image with a caption.
在这个项目中,我制作了一个页面,用户可以在其中登录到他们的帐户并上传带有标题的新图像。 Then I tried to store the image with the written caption into database but suddenly this error message appears:
然后我尝试将带有书面说明的图像存储到数据库中,但突然出现此错误消息:
Trying to get property 'title' of non-object (View: F:\xampp\htdocs\frameworks\laravel 5.8\resources\views\profiles\index.blade.php)
Here is my PostsController.php
:这是我的
PostsController.php
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function create()
{
return view('posts.create');
}
public function store()
{
$data = request()->validate([
'caption' => 'required',
'image' => ['required','image'],
]);
$imagePath = request('image')->store('uploads','public');
auth()->user()->posts()->create([
'caption' => $data['caption'],
'image' => $imagePath,
]);
return redirect('/profile/' . auth()->user()->id);
}
}
And this is the create.blade.php
under the posts
directory which I used as form:这是我用作表单的
posts
目录下的create.blade.php
:
@extends('layouts.app')
@section('content')
<div class="container">
<form action="/p" enctype="multipart/form-data" method="post">
@csrf
<div class="row">
<div class="col-8 offset-2">
<div class="row">
<h1>Add New Post</h1>
</div>
<div class="form-group row">
<label for="caption" class="col-md-4 col-form-label">Post Caption</label>
<input id="caption"
type="text"
class="form-control @error('caption') is-invalid @enderror"
name="caption"
value="{{ old('caption') }}"
autocomplete="caption" autofocus>
@error('caption')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="row">
<label for="image" class="col-md-4 col-form-label">Post Image</label>
<input type="file" class="form-control-file" id="image" name="image">
@error('image')
<strong>{{ $message }}</strong>
@enderror
</div>
<div class="row pt-4">
<button class="btn btn-primary">Add New Post</button>
</div>
</div>
</div>
</form>
</div>
@endsection
And this is also the index.blade.php
which the error comes from:这也是错误来自的
index.blade.php
:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-3 p-5">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-19/s150x150/116422910_114925270146660_408650316921290541_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_ohc=dshpB2gOHkMAX-fg_cq&oh=f88bf9c6f5cb1d7ddf64bee889d70add&oe=5F60FB51" class="rounded-circle"></img>
</div>
<div class="col-9">
<div class="d-flex justify-content-between align-items-baseline">
<h1>{{ $user->username }}</h1>
<a href="#">Add new post</a>
</div>
<div class="d-flex">
<div class="pr-5"><strong>2</strong> posts</div>
<div class="pr-5"><strong>77</strong> followers</div>
<div class="pr-5"><strong>56</strong> followings</div>
</div>
<div class="pt-4 font-weight-bold">{{ $user->profile->title }}</div>
<div>{{ $user->profile->description }}</div>
<div><a href="#">{{ $user->profile->url ?? 'Not Available'}}</a></div>
</div>
</div>
<div class="row">
<div class="col-4">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-15/e35/105520633_108718614121090_2184698351066702676_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_cat=110&_nc_ohc=U8VChpgH8FAAX_rx2ui&oh=c163882b70cfbe374cf2adfcaa593b6e&oe=5F5EF3DE" class="w-100"></img>
</div>
<div class="col-4">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-15/e35/105520633_108718614121090_2184698351066702676_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_cat=110&_nc_ohc=U8VChpgH8FAAX_rx2ui&oh=c163882b70cfbe374cf2adfcaa593b6e&oe=5F5EF3DE" class="w-100"></img>
</div>
<div class="col-4">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-15/e35/105520633_108718614121090_2184698351066702676_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_cat=110&_nc_ohc=U8VChpgH8FAAX_rx2ui&oh=c163882b70cfbe374cf2adfcaa593b6e&oe=5F5EF3DE" class="w-100"></img>
</div>
</div>
</div>
@endsection
I wonder what is going wrong here, so if you have any idea or suggestion, please let me know, I would really really appreciate that!我想知道这里出了什么问题,所以如果您有任何想法或建议,请告诉我,我真的很感激!
Note: If you want me to write any other file codes of Laravel for you to see, please comment, I would quickly put an update for you.注意:如果你想让我写 Laravel 的任何其他文件代码给你看,请评论,我会尽快为你更新。
UPDATE #1
更新 #1
User.php:用户.php:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'username', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function posts()
{
return $this->hasMany(Post::class);
}
public function profile()
{
return $this->hasOne(Profile::class);
}
}
Post.php后.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $guarded = [];
Public function user()
{
return $this->belongsTo(User::class);
}
}
create_posts_table.php: create_posts_table.php:
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->text('caption');
$table->string('image');
$table->timestamps();
// $table->index('user_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
UPDATE #2
更新 #2
Profile.php配置文件.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
ProfilesController.php: ProfilesController.php:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class ProfilesController extends Controller
{
public function index($user)
{
$user = User::findOrFail($user);
return view('profiles.index' ,[
'user' => $user,
]);
}
}
#UPDATE 3
#更新 3
Here is how the profiles should look like:以下是配置文件的外观:
I'm new to Laravel and trying to create my first project.我是 Laravel 的新手,正在尝试创建我的第一个项目。 In this project, I've made a page where users can Login to their account and upload a new image with a caption.
在这个项目中,我制作了一个页面,用户可以在其中登录到他们的帐户并上传带有标题的新图像。 Then I tried to store the image with the written caption into database but suddenly this error message appears:
然后我尝试将带有书面说明的图像存储到数据库中,但突然出现此错误消息:
Trying to get property 'title' of non-object (View: F:\xampp\htdocs\frameworks\laravel 5.8\resources\views\profiles\index.blade.php)
Here is my PostsController.php
:这是我的
PostsController.php
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function create()
{
return view('posts.create');
}
public function store()
{
$data = request()->validate([
'caption' => 'required',
'image' => ['required','image'],
]);
$imagePath = request('image')->store('uploads','public');
auth()->user()->posts()->create([
'caption' => $data['caption'],
'image' => $imagePath,
]);
return redirect('/profile/' . auth()->user()->id);
}
}
And this is the create.blade.php
under the posts
directory which I used as form:这是我用作表单的
posts
目录下的create.blade.php
:
@extends('layouts.app')
@section('content')
<div class="container">
<form action="/p" enctype="multipart/form-data" method="post">
@csrf
<div class="row">
<div class="col-8 offset-2">
<div class="row">
<h1>Add New Post</h1>
</div>
<div class="form-group row">
<label for="caption" class="col-md-4 col-form-label">Post Caption</label>
<input id="caption"
type="text"
class="form-control @error('caption') is-invalid @enderror"
name="caption"
value="{{ old('caption') }}"
autocomplete="caption" autofocus>
@error('caption')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="row">
<label for="image" class="col-md-4 col-form-label">Post Image</label>
<input type="file" class="form-control-file" id="image" name="image">
@error('image')
<strong>{{ $message }}</strong>
@enderror
</div>
<div class="row pt-4">
<button class="btn btn-primary">Add New Post</button>
</div>
</div>
</div>
</form>
</div>
@endsection
And this is also the index.blade.php
which the error comes from:这也是错误来自的
index.blade.php
:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-3 p-5">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-19/s150x150/116422910_114925270146660_408650316921290541_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_ohc=dshpB2gOHkMAX-fg_cq&oh=f88bf9c6f5cb1d7ddf64bee889d70add&oe=5F60FB51" class="rounded-circle"></img>
</div>
<div class="col-9">
<div class="d-flex justify-content-between align-items-baseline">
<h1>{{ $user->username }}</h1>
<a href="#">Add new post</a>
</div>
<div class="d-flex">
<div class="pr-5"><strong>2</strong> posts</div>
<div class="pr-5"><strong>77</strong> followers</div>
<div class="pr-5"><strong>56</strong> followings</div>
</div>
<div class="pt-4 font-weight-bold">{{ $user->profile->title }}</div>
<div>{{ $user->profile->description }}</div>
<div><a href="#">{{ $user->profile->url ?? 'Not Available'}}</a></div>
</div>
</div>
<div class="row">
<div class="col-4">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-15/e35/105520633_108718614121090_2184698351066702676_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_cat=110&_nc_ohc=U8VChpgH8FAAX_rx2ui&oh=c163882b70cfbe374cf2adfcaa593b6e&oe=5F5EF3DE" class="w-100"></img>
</div>
<div class="col-4">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-15/e35/105520633_108718614121090_2184698351066702676_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_cat=110&_nc_ohc=U8VChpgH8FAAX_rx2ui&oh=c163882b70cfbe374cf2adfcaa593b6e&oe=5F5EF3DE" class="w-100"></img>
</div>
<div class="col-4">
<img src="https://scontent-frx5-1.cdninstagram.com/v/t51.2885-15/e35/105520633_108718614121090_2184698351066702676_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_cat=110&_nc_ohc=U8VChpgH8FAAX_rx2ui&oh=c163882b70cfbe374cf2adfcaa593b6e&oe=5F5EF3DE" class="w-100"></img>
</div>
</div>
</div>
@endsection
I wonder what is going wrong here, so if you have any idea or suggestion, please let me know, I would really really appreciate that!我想知道这里出了什么问题,所以如果您有任何想法或建议,请告诉我,我真的很感激!
Note: If you want me to write any other file codes of Laravel for you to see, please comment, I would quickly put an update for you.注意:如果你想让我写 Laravel 的任何其他文件代码给你看,请评论,我会尽快为你更新。
UPDATE #1
更新 #1
User.php:用户.php:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'username', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function posts()
{
return $this->hasMany(Post::class);
}
public function profile()
{
return $this->hasOne(Profile::class);
}
}
Post.php后.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $guarded = [];
Public function user()
{
return $this->belongsTo(User::class);
}
}
create_posts_table.php: create_posts_table.php:
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->text('caption');
$table->string('image');
$table->timestamps();
// $table->index('user_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
UPDATE #2
更新 #2
Profile.php配置文件.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
ProfilesController.php: ProfilesController.php:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class ProfilesController extends Controller
{
public function index($user)
{
$user = User::findOrFail($user);
return view('profiles.index' ,[
'user' => $user,
]);
}
}
#UPDATE 3
#更新 3
Here is how the profiles should look like:以下是配置文件的外观:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.