为什么控制器没有重定向到Laravel 5.4中的正确视图

时间:2017-03-03 10:51:39

标签: php laravel

在下面的代码片段中,我的示例页面中有一个html表单,其中我的路由中的表单的action属性设置为exampleController URI,如下所示:

htmlPage.blade.php

<form action="/exampleController" method="POST">
    {{csrf_field()}}
    // rest of form stuff goes here
</form>

@if(isset($result))
    <table>
        <td>{{ $result }}</td>
    </table>
 @endif

Web.php

Route::get('/gotoform', 'PageController@showform');
Route::post('/exampleController', 'PageController@processData');

Controller.php这样

class PageController extends Controller
{
    public function showform()
   {
        return view('htmlPage');
   }
   }
   public function processData(Request $request)
   {
       $result = $request['htmlInputData'];
       return view('htmlPage')->with(compact('result');
   }
}

从这里一切都很好,数据正在页面上正确处理和显示,但我想知道为什么$result变量返回的控制器的URL地址为mydomain.com/exampleController而不是{{1}这是负责显示操作结果的html页面。

此外,由于生成的URL地址为mydomain.com/htmlPage(这不是我的预期),因此在手动刷新时会返回以下错误:

mydomain.com/exampleController

有人可以告诉我,我错过了什么? 提前谢谢。

编辑: 通过更改为MethodNotAllowedHttpException in RouteCollection.php line 233: Route::any错误已消失,但控制器返回的网址仍然不正确。

1 个答案:

答案 0 :(得分:0)

这是因为您返回了一个视图(view('htmlPage'))。

如果您想访问此网址mydomain.com/htmlPage,则需要重定向不加载视图。

使用此return redirect(url('/htmlPage'))->with(compact('result');

为了成功加载,您需要另一条路线:

Route::get('/htmlPage', 'PageController@loadhtmlPage');

并且要加载此网址中的视图,您必须在控制器中执行此操作:

public function loadhtmlPage(Request $request)
{
    return view('htmlPage');
}