我正在尝试将数据保存到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
答案 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配置不正确的问题,而将重点放在其他避免错误的方法上。
使用named route:
Route::get('/projects','ProjectsController@index')->name('projects.index');
,并使用路由名称进行重定向:
return redirect()->route('projects.index');
此应该在您的项目中生成正确的网址。
使用serve
代替Apache进行开发。
在您的Laravel项目目录中打开一个终端,然后运行以下命令:
php artisan serve
这将在http://localhost:8000处启动PHP的内置网络服务器,从而完全跳过Apache。在开发过程中,这非常好。