Laravel5.7 路由使用 Route:match 不起作用

Posted

技术标签:

【中文标题】Laravel5.7 路由使用 Route:match 不起作用【英文标题】:Laravel5.7 routing using Route:match not working 【发布时间】:2019-06-28 23:58:16 【问题描述】:

我正在使用 Laravel 5.7 我正在尝试路由我的函数以获取和发布。 我想加载一个视图并发布一个表单。 正如我所研究的那样

Route::match(['GET','POST'], '/', TestController@test);
Route::any('/', TestController@test);`

其中一个应该可以工作。

但这对我不起作用,还有其他方法还是我做错了什么?

更新

路由到管理员:

Route::match(['get','post'], 'cp/', 'AdminController@test');

管理控制器中的功能:

public function test( Request $request)

    $data=array();

    if ($request->isMethod('POST')) 
        echo "here it is";
        exit;
    else 
        echo "still in get!";
    
    return view('admin/login',  $data);

简而言之,我的观点是这样的:

<form  action=" url('/cp') " method="POST">
    <input type="hidden" name="_token" value=" csrf_token() ">
<form>

【问题讨论】:

你有什么错误吗?你能告诉我们 TestController 吗? 我没有收到任何错误,每次我发布我的表单Request::method() 总是返回 GET,永远不要执行此代码if ($request-&gt;isMethod('POST')) 仅在我定义单独的发布路线时才有效。 @Saromase 每当我提交表单时,我都没有收到任何错误,它会转到“获取”代码。如果我创建一个发布路线,则相同的代码可以工作。 【参考方案1】:

在你身上试试这个web.php

Route::match(['get', 'post'], '/testMethods', function () 

    dd('its workong bro');
);

然后在您的网络浏览器中点击yourprojectname/testMethods

例如:http://localhost:8000/testMethods

来自Illuminate\Contracts\Routing\Registrar.php

public function match($methods, $uri, $action);

这里是匹配函数参数列表

参数一 方法列表:例如:get,post,put,patch

参数二 url : Eg: /testMethods

参数三方法:例如:TestController@test

Route::match(['get', 'post'], '/testMethods','TestController@test');

【讨论】:

这应该是一条评论!【参考方案2】:

你可以尝试改变吗

Route::match(['GET','POST'], '/', TestController@test);

Route::match(['GET','POST'], '/', 'TestController@test');

Route::any('/', TestController@test);

Route::any('/', 'TestController@test');

第二个参数应该用引号括起来!

更新:

您的路线匹配代码应该是这样的:

Route::match(array('GET', 'POST', 'PUT'), "/", array(
    'uses' => 'Controller@index',
    'as' => 'index'
));

【讨论】:

好吧,我试过了,但它仍然在获取! @iftikhar @SaniaIshaq 你能分享完整的代码吗?查看表格在哪里! + 控制器和路线! 确定路由:Route::match(['get','post'], 'cp/', 'AdminController@test'); 对于我的测试函数,它类似于:` public function test( Request $request) $data=array(); if ($request->isMethod('POST')) echo "这里是";出口; else echo "还在获取中!"; 返回视图('管理员/登录',$数据); ` 用post作为方法形成简单的输入表单。【参考方案3】:

好吧,到最后我明白如何使用route::match 我应该指定没有它的函数名它将不起作用。所以当我将它更改为Route::match(array('GET', 'POST', 'PUT'), "/login", array( 'uses' => 'AdminController@login', 'as' => 'login' )); 它解决了这个问题。谢谢大家的帮助!!

【讨论】:

以上是关于Laravel5.7 路由使用 Route:match 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.7 签名路由返回 403 无效签名

Laravel 5.7 - 覆盖请求验证类中的 all() 方法以验证路由参数?

Laravel - PHPUnit 中的伪造路由

Laravel 5.7 和 Vue 路由模式

Laravel 无法路由到 /admin

Laravel 5.7 处理来自 API 的电子邮件验证错误