laravel-5.7:数据未保存到数据库中,未找到对象

时间:2019-03-10 17:42:26

标签: laravel laravel-5.7

我正在尝试将数据保存到db中,但是没有保存,并说找不到该对象,任何人都可以建议我解决方案,我正在关注本教程:https://laracasts.com/series/laravel-from-scratch-2018/episodes/10

控制器:

public function index()
{
    $projects = Project::all();

    return view('projects.index', compact('projects'));
}

public function create()
{
    return view('projects.create');
}

public function store()
{
    $project = new Project();
    $project->title = request('title');
    $project->description = request('description');
    $project->save();

    return redirect('/projects');
}

路线:

Route::get('/projects','ProjectsController@index');
Route::post('/projects','ProjectsController@store');
Route::get('/projects/create','ProjectsController@create');

create.blade.php:

<form method="POST" action="/projects">
    {{ csrf_field() }}
    <div>
        <input type="text" name="title" placeholder="Project title">
    </div>
    <div>
        <textarea name="description" placeholder="Project description"></textarea>
    </div>
    <div>
        <button type="submit">Create Project</button>
    </div>
</form>

index.blade.php:

@foreach($projects as $project)
    <li>{{ $project->title }}</li>
@endforeach

2 个答案:

答案 0 :(得分:3)

您错过了控制器store()中的传递请求参数

public function store(Request $request)
{
    $project = new Project();
    $project->title = $request->title;
    $project->description = $request->description;
    $project->save();
    return redirect('/projects');
}

也不要忘记在控制器类的上方(外部)添加use Illuminate\Http\Request;

答案 1 :(得分:1)

您发布的Laravel代码在正确配置的网站下是正确的。您评论中的错误:

  

找不到对象!在此服务器上找不到请求的URL。的   引荐页面上的链接似乎有误或已过时。请   将该错误通知该页面的作者。如果您认为这是一个   服务器错误,请与网站管理员联系。错误404本地主机   Apache / 2.4.33(Win32)OpenSSL / 1.1.0h PHP / 7.2.7

Apache错误页面 ,这意味着它根本没有从laravel项目中请求页面。数据可能保存在数据库中,但是随后您重定向到项目外部的页面,而Apache找不到它。

您的网站位于http://localhost/laravel/public,这意味着您需要访问http://localhost/laravel/public/projects上的项目页面。但是,redirect('/projects')为您提供了绝对路径,而不是 relative 路径,将您带到http://localhost/projects,该路径不存在。

解决方案

由于这是一个本地开发项目,所以我将跳过Apache配置不正确的问题,而将重点放在其他避免错误的方法上。

选项1

使用named route

Route::get('/projects','ProjectsController@index')->name('projects.index');

,并使用路由名称进行重定向:

return redirect()->route('projects.index');

应该在您的项目中生成正确的网址。

选项2

使用serve代替Apache进行开发。

在您的Laravel项目目录中打开一个终端,然后运行以下命令:

php artisan serve

这将在http://localhost:8000处启动PHP的内置网络服务器,从而完全跳过Apache。在开发过程中,这非常好。