laravel 5 可以获取路由,但不能 POST
laravel 5 can GET routes, but not POST
在此处浏览 Laravel 5 上的教程:
http://laravel.com/docs/5.1/quickstart
现在,在尝试 post 将数据形成到 /task 时出现错误...
Not Found
The requested URL /task was not found on this server.
更糟糕的是,如果我设置了一个到 GET /task 的路由并回显了一些简单的东西 - 这可行。请问 POST 有什么我遗漏的吗?
这是我的完整路线文件:
<?php
use App\Task;
use Illuminate\Http\Request;
/**
* Display All Tasks
*/
Route::get('/', function () {
$tasks = Task::orderBy('created_at', 'asc')->get();
return view('tasks', [
'tasks' => $tasks
]);
});
/**
* Add A New Task
*/
Route::post('/task', function (Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
]);
if ($validator->fails()) {
//return redirect('/')->withInput()->withErrors($validator);
}
$task = new Task;
$task->name = $request->name;
$task->save();
//return redirect('/');
});
/**
* Delete An Existing Task
*/
Route::delete('/task/{id}', function ($id) {
Task::findOrFail($id)->delete();
return redirect('/');
});
Route::get('/task', function() {
echo 'ds';
});
谢谢大家。
DS
编辑....这是我post使用
的表单代码
@extends('layouts.scaffold')
@section('main')
<!-- Create Task Form... -->
<form action="/task" method="POST" class="form-horizontal">
{{ csrf_field() }}
<!-- Task Name -->
<div class="form-group">
<label for="task" class="col-sm-3 control-label">Task</label>
<div class="col-sm-6">
<input type="text" name="name" id="task-name" class="form-control">
</div>
</div>
<!-- Add Task Button -->
<div class="form-group">
<div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-default">
<i class="fa fa-plus"></i> Add Task
</button>
</div>
</div>
</form>
<!-- Current Tasks -->
@if (count($tasks) > 0)
<div class="panel panel-default">
<div class="panel-heading">
Current Tasks
</div>
<div class="panel-body">
<table class="table table-striped task-table">
<!-- Table Headings -->
<thead>
<th>Task</th>
<th> </th>
</thead>
<!-- Table Body -->
<tbody>
@foreach ($tasks as $task)
<tr>
<!-- Task Name -->
<td class="table-text">
<div>{{ $task->name }}</div>
</td>
<!-- Delete Button -->
<td>
<form action="/task/{{ $task->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button>Delete Task</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endif
@endsection
Laravel 无法解析 POST
路由的原因是 /task
是路由的名称,而不是完整的地址。它没有查找 http://localhost/project/task
,而是查找 /task
,这不是有效地址。解决方案是使用 Laravel 5 的 url()
辅助方法来指定形式的 action
:
<form method="POST" action="{{ url("/task") }}">...</form>
<!-- {{ ... }} is .blade syntax for <?php ... ?> -->
此外,请注意 GET
路由的工作方式与 redirect("/")
的功能类似于 url("/")
在此处浏览 Laravel 5 上的教程: http://laravel.com/docs/5.1/quickstart
现在,在尝试 post 将数据形成到 /task 时出现错误...
Not Found
The requested URL /task was not found on this server.
更糟糕的是,如果我设置了一个到 GET /task 的路由并回显了一些简单的东西 - 这可行。请问 POST 有什么我遗漏的吗?
这是我的完整路线文件:
<?php
use App\Task;
use Illuminate\Http\Request;
/**
* Display All Tasks
*/
Route::get('/', function () {
$tasks = Task::orderBy('created_at', 'asc')->get();
return view('tasks', [
'tasks' => $tasks
]);
});
/**
* Add A New Task
*/
Route::post('/task', function (Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
]);
if ($validator->fails()) {
//return redirect('/')->withInput()->withErrors($validator);
}
$task = new Task;
$task->name = $request->name;
$task->save();
//return redirect('/');
});
/**
* Delete An Existing Task
*/
Route::delete('/task/{id}', function ($id) {
Task::findOrFail($id)->delete();
return redirect('/');
});
Route::get('/task', function() {
echo 'ds';
});
谢谢大家。
DS
编辑....这是我post使用
的表单代码@extends('layouts.scaffold')
@section('main')
<!-- Create Task Form... -->
<form action="/task" method="POST" class="form-horizontal">
{{ csrf_field() }}
<!-- Task Name -->
<div class="form-group">
<label for="task" class="col-sm-3 control-label">Task</label>
<div class="col-sm-6">
<input type="text" name="name" id="task-name" class="form-control">
</div>
</div>
<!-- Add Task Button -->
<div class="form-group">
<div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-default">
<i class="fa fa-plus"></i> Add Task
</button>
</div>
</div>
</form>
<!-- Current Tasks -->
@if (count($tasks) > 0)
<div class="panel panel-default">
<div class="panel-heading">
Current Tasks
</div>
<div class="panel-body">
<table class="table table-striped task-table">
<!-- Table Headings -->
<thead>
<th>Task</th>
<th> </th>
</thead>
<!-- Table Body -->
<tbody>
@foreach ($tasks as $task)
<tr>
<!-- Task Name -->
<td class="table-text">
<div>{{ $task->name }}</div>
</td>
<!-- Delete Button -->
<td>
<form action="/task/{{ $task->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button>Delete Task</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endif
@endsection
Laravel 无法解析 POST
路由的原因是 /task
是路由的名称,而不是完整的地址。它没有查找 http://localhost/project/task
,而是查找 /task
,这不是有效地址。解决方案是使用 Laravel 5 的 url()
辅助方法来指定形式的 action
:
<form method="POST" action="{{ url("/task") }}">...</form>
<!-- {{ ... }} is .blade syntax for <?php ... ?> -->
此外,请注意 GET
路由的工作方式与 redirect("/")
的功能类似于 url("/")