【问题标题】:laravel-5.7: data is not saving into database, Object not foundlaravel-5.7:数据未保存到数据库中,找不到对象
【发布时间】:2019-08-01 02:21:56
【问题描述】:

我正在尝试将数据保存到数据库中,但它没有保存并说找不到对象,任何人都可以建议我解决方案,我正在关注本教程: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

【问题讨论】:

  • 代码似乎是正确的...您可以发布您收到的消息错误吗?
  • 找不到对象!在此服务器上找不到请求的 URL。引用页面上的链接似乎是错误的或过时的。请将该错误通知该页面的作者。如果您认为这是服务器错误,请联系网站管理员。错误 404 localhost Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.7
  • 如果您使用该错误消息更新帖子并包含地址栏中的 url 和创建页面的 url 等信息,这将有所帮助。听起来您可能正在重定向到与您在 Apache 中为网站配置的网址不匹配的网址。
  • 这是错误页面的 url localhost/projects 这是 url 或创建页面 localhost/laravel/project/public/projects/create
  • 您可以编辑您的帖子并在问题中包含这些详细信息吗?您发布的所有代码都是正确的 - 这些错误才是真正的问题

标签: laravel laravel-5.7


【解决方案1】:

你错过了在控制器 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;

【讨论】:

  • 使用request('title')时不需要这样做,因为request()函数直接从容器中检索请求(而不是在控制器方法上使用依赖注入)
  • @programmer0001 - 你是否在控制器中包含了 Project 类?
  • 命名空间 App\Http\Controllers;使用 Illuminate\Http\Request;使用应用\项目;类 ProjectsController 扩展控制器 { public function index() { $projects = Project::all();返回视图('projects.index',紧凑('projects')); } 公共函数 create() { 返回视图('projects.create'); } 公共函数存储() { $project = 新项目(); $project->title = $request('title'); $project->description = $request('description'); $项目->保存();返回重定向('/projects.index') } }
  • 我建议先尝试调试代码。例如,在第一行的 store 方法中放入 die('test') 以查看请求是否到达该 store()。
  • 你也可以多试一试。修改 - 使用 App\Project 作为项目;
【解决方案2】:

您发布的 Laravel 代码在正确配置的网站下是正确的。来自您的 cmets 的错误:

找不到对象!在此服务器上找不到请求的 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') 为您提供了 绝对 路径而不是 相对 路径,将您发送到不存在的 http://localhost/projects

解决方案

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

选项 1

使用named route

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

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

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

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

选项 2

使用 serve 代替 Apache 进行开发。

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

php artisan serve

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

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2021-10-27
    相关资源
    最近更新 更多