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

问题描述 投票:0回答:2

我正在尝试将数据保存到数据库,但它没有保存,并说没有找到该对象,任何人都可以建议我解决方案,我正在按照本教程: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
laravel laravel-5.7
2个回答
1
投票

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

找不到对象!在此服务器上找不到请求的URL。引用页面上的链接似乎是错误的或过时的。请通知该页面的作者有关错误的信息。如果您认为这是服务器错误,请与网站管理员联系。错误404 localhost 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')为您提供绝对路径而不是相对路径,将您发送到不存在的http://localhost/projects

解决方案

由于这是一个本地开发项目,我将跳过Apache配置不当的问题,并专注于避免错误的其他方法。

Option 1

使用named route

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

并使用重定向的路由名称:

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

这应该在您的项目中生成正确的URL。

Option 2

使用serve进行开发而不是Apache。

在Laravel项目目录中打开终端并运行以下命令:

php artisan serve

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


3
投票

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

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;

© www.soinside.com 2019 - 2024. All rights reserved.