Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel的用户提交的帖子存储功能_Php_Laravel_Routes_Posts - Fatal编程技术网

Php 使用Laravel的用户提交的帖子存储功能

Php 使用Laravel的用户提交的帖子存储功能,php,laravel,routes,posts,Php,Laravel,Routes,Posts,所以除了我之前的话题(谢谢你们的帮助) 我现在面临着存储函数的问题,我得到了错误:“试图获取非对象的属性 这是控制器中的存储功能 public function store(Request $request) { // validate the data $this->validate($request, array( 'title' => 'required|max:255', 'body' => 'r

所以除了我之前的话题(谢谢你们的帮助)

我现在面临着存储函数的问题,我得到了错误:“试图获取非对象的属性

这是控制器中的存储功能

    public function store(Request $request)
{
    // validate the data
    $this->validate($request, array(
            'title' => 'required|max:255',
            'body'  => 'required'
        ));
    // store in the database
    $userpost = new Usp;
    $userpost->title = $request->title;
    $userpost->body = $request->body;
    $userpost->save();
    Session::flash('success', 'The blog post was successfully saved!');
    return redirect()->route('admin.userposts.show', $userpost->id);
}
这是创建userpost的视图(为了更清楚,请注意,相同的表单当然有不同的路径,适用于我的简单帖子,但不适用于我的用户提交的帖子)


所以事实上,问题不在于存储方法,而在于路由

Route::get('/userposts/{id}', 'UserPostsController@show')->name('admin.userposts.show'); 
Route::get('/userposts/create', 'UserPostsController@create')->name('admin.userposts.create'); 
Route::post('/userposts/store', 'UserPostsController@store')->name('admin.userposts.store');
当按该顺序注册路由时,当laravel将迭代您的路由时,它将首先遇到show,因此它将以“create”作为id。因此,它将进入show方法,并且它将找不到任何匹配的post,post为空,您将得到错误

所以,有两种方法可以解决这个问题

第一个(最简单,在所有情况下都有效,可能不是最好的)是将创建路线放在显示路线之前

第二个,在我看来是最好的,是在id中添加一个(在slug的情况下不起作用)

Route::get('/userposts/{id}', 'UserPostsController@show')->name('admin.userposts.show')->where('id', '[0-9]+');
因此,create将与正则表达式不匹配,它也不会出现在show方法中


对于“资源创建”(存储在数据库中),我不会使用“逐个字段”的方法

相反,我会这样做:

$userpost = Usp::create($request->only('title', 'body'));
我觉得这更健谈

但是,这是行不通的,拉威尔保护我们不受这些事情的影响。要让它起作用,你有两个选择

  • (我认为这是最好的选择)
    在您的模型中,添加一个名为$fillable的受保护变量,该变量包含允许批量分配的所有列*。在这种情况下,您可以放置:

    protected$filleble=['name'];

  • (如果您确定自己在做什么,则可选择此选项) 在你的模型中,你可以说,嘿,我知道我在这里做什么,让我做我的事情,不要保护我。在这种情况下,你可以放:

    protected$guarded=[];

  • 注:

  • $request->only('field1',…)
    为您提供一个字段数组,字段名称作为键,在本例中,它为您提供
    ['field1'=>$request->field1]
    。在本例中,它将为您提供
    ['title'=>$request->title,'body'=>$request->body]

  • 质量分配是指将数组赋给模型,并将所有属性赋给数组的字段

  • 当我的意思是laravel保护我们不受这些事情的影响时,它并不能真正保护我们,因为它不是一种坏的做法(相反,我发现它更具可读性),而是因为它允许你犯错误(例如,设置不存在的字段)


  • 所以事实上,问题不在于存储方法,而在于路由

    Route::get('/userposts/{id}', 'UserPostsController@show')->name('admin.userposts.show'); 
    Route::get('/userposts/create', 'UserPostsController@create')->name('admin.userposts.create'); 
    Route::post('/userposts/store', 'UserPostsController@store')->name('admin.userposts.store');
    
    当按该顺序注册路由时,当laravel将迭代您的路由时,它将首先遇到show,因此它将以“create”作为id。因此,它将进入show方法,并且它将找不到任何匹配的post,post为空,您将得到错误

    所以,有两种方法可以解决这个问题

    第一个(最简单,在所有情况下都有效,可能不是最好的)是将创建路线放在显示路线之前

    第二个,在我看来是最好的,是在id中添加一个(在slug的情况下不起作用)

    Route::get('/userposts/{id}', 'UserPostsController@show')->name('admin.userposts.show')->where('id', '[0-9]+');
    
    因此,create将与正则表达式不匹配,它也不会出现在show方法中


    对于“资源创建”(存储在数据库中),我不会使用“逐个字段”的方法

    相反,我会这样做:

    $userpost = Usp::create($request->only('title', 'body'));
    
    我觉得这更健谈

    但是,这是行不通的,拉威尔保护我们不受这些事情的影响。要让它起作用,你有两个选择

  • (我认为这是最好的选择)
    在您的模型中,添加一个名为$fillable的受保护变量,该变量包含允许批量分配的所有列*。在这种情况下,您可以放置:

    protected$filleble=['name'];

  • (如果您确定自己在做什么,则可选择此选项) 在你的模型中,你可以说,嘿,我知道我在这里做什么,让我做我的事情,不要保护我。在这种情况下,你可以放:

    protected$guarded=[];

  • 注:

  • $request->only('field1',…)
    为您提供一个字段数组,字段名称作为键,在本例中,它为您提供
    ['field1'=>$request->field1]
    。在本例中,它将为您提供
    ['title'=>$request->title,'body'=>$request->body]

  • 质量分配是指将数组赋给模型,并将所有属性赋给数组的字段

  • 当我的意思是laravel保护我们不受这些事情的影响时,它并不能真正保护我们,因为它不是一种坏的做法(相反,我发现它更具可读性),而是因为它允许你犯错误(例如,设置不存在的字段)


  • ['userpost'=>$userpost',id'=>$id]
    这是干什么用的???请指定代码的哪一行让您尝试获取非对象的属性。我的错我尝试了一些东西,但忘了删除它,但仍然不起作用。我将更新帖子。我希望知道是哪一行代码给了我这个错误:(对我来说,查看也会更容易。我的帖子存储功能中有完全相同的功能,它正在工作,但不在用户提交的帖子上。我在尝试创建帖子时遇到错误。表单甚至没有显示是哪行代码说试图获取……….错误消息?你有
    $request->title a吗nd$request->body
    ???将值作为标题和正文传递给控制器?您能给我们错误行吗?
    ['userpost'=>$userpost',id'=>$id]
    这是干什么用的???请指定t的哪一行