【问题标题】:Method [validate] does not exist error in laravel 5.2方法 [validate] 在 laravel 5.2 中不存在错误
【发布时间】:2016-04-14 20:30:20
【问题描述】:

我刚开始学习 laravel。 我正在使用 laravel 5.2.29 运行代码时出现错误:

哎呀,好像出了点问题。 Controller.php 第 107 行中的 BadMethodCallException: 方法 [validate] 不存在。

这是显示的错误行:

in Controller.php line 107
2.at Controller->__call('validate', array(object(Request), array('action' =>        'required', 'name' => 'required'))) in NiceActionController.php line 31
3.at NiceActionController->validate(object(Request), array('action' => 'required', 'name' => 'required')) in NiceActionController.php line 31
4.at NiceActionController->postNiceAction(object(Request))
5.at call_user_func_array(array(object(NiceActionController), 'postNiceAction'), array(object(Request))) in Controller.php line 80
6.at Controller->callAction('postNiceAction', array(object(Request))) in ControllerDispatcher.php line 146
7.at ControllerDispatcher->call(object(NiceActionController), object(Route), 'postNiceAction') in ControllerDispatcher.php line 94
8.at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
9.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
10.at Pipeline->Illuminate\Routing\{closure}(object(Request))
11.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
12.at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96
13.at ControllerDispatcher->callWithinStack(object(NiceActionController), object(Route), object(Request), 'postNiceAction') in ControllerDispatcher.php line 54
14.at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\NiceActionController', 'postNiceAction') in Route.php line 174
15.at Route->runController(object(Request)) in Route.php line 140
16.at Route->run(object(Request)) in Router.php line 724
17.at Router->Illuminate\Routing\{closure}(object(Request))
18.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
19.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64
20.at VerifyCsrfToken->handle(object(Request), object(Closure))
21.at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
22.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
23.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
24.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
25.at ShareErrorsFromSession->handle(object(Request), object(Closure))
26.at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
27.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
28.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
29.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62
30.at StartSession->handle(object(Request), object(Closure))
31.at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
32.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
33.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
34.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
35.at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
36.at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
37.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
38.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
39.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
40.at EncryptCookies->handle(object(Request), object(Closure))
41.at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
42.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
43.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
44.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64
45.at VerifyCsrfToken->handle(object(Request), object(Closure))
46.at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
47.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
48.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
49.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
50.at ShareErrorsFromSession->handle(object(Request), object(Closure))
51.at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
52.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
53.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
54.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62
55.at StartSession->handle(object(Request), object(Closure))
56.at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
57.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
58.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
59.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
60.at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
61.at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
62.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
63.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
64.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
65.at EncryptCookies->handle(object(Request), object(Closure))
66.at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
67.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
68.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
69.at Pipeline->Illuminate\Routing\{closure}(object(Request))
70.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
71.at Pipeline->then(object(Closure)) in Router.php line 726
72.at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
73.at Router->dispatchToRoute(object(Request)) in Router.php line 675
74.at Router->dispatch(object(Request)) in Kernel.php line 246
75.at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
76.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
77.at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
78.at CheckForMaintenanceMode->handle(object(Request), object(Closure))
79.at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'),         array(object(Request), object(Closure))) in Pipeline.php line 124
80.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
81.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
82.at Pipeline->Illuminate\Routing\{closure}(object(Request))
83.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
84.at Pipeline->then(object(Closure)) in Kernel.php line 132
85.at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
86.at Kernel->handle(object(Request)) in index.php line 54

我的路线代码:

<?php


Route::group(['middleware' => ['web']], function(){

Route::get('/', function () {
    return view('home');
})->name('home');

Route::group(['prefix'=>'do'], function(){


    Route::get('/{action}/{name?}', [
        'uses' => 'NiceActionController@getNiceAction', 
        'as' => 'niceaction'  //router name same as ->name('routername')
    ]);



    Route::post('/', [

        'uses' => 'NiceActionController@postNiceAction',
        'as'   => 'benice'

    ]);

});

});

我的控制器代码如下:

<?php

namespace App\Http\Controllers;


use Illuminate\Routing\Controller;
use \Illuminate\Http\Request;

class NiceActionController extends Controller
{
public function getNiceAction($action, $name=null)
{
    return view('actions.'.$action, ['name' => $name]);

}

public function postNiceAction(Request $request)
{

    $this->validate($request, [

           'action' => 'required',
           'name' =>'required'

       ]);

            return view('actions.nice',            ['action'=>$request['action'],'name'=>$this->transformName($request['name'])]);

}
private function transformName($name)
{
    $prefix='KING';
    return $prefix.strtoupper($name);
}
}

我的基本主控制器“控制器”有以下代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;


class Controller extends BaseController
{
use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;

}

我有什么遗漏吗????

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您需要扩展 App\Http\Controllers\Controller 类,该类使用实现所需 validate 方法的必要 ValidatesRequests 特征。

    所以在你的 NiceActionController 类中只需删除这一行

    use Illuminate\Routing\Controller;
    

    这样一行:

    class NiceActionController extends Controller
    

    将从同一命名空间(更准确地说是 App\Http\Controllers\Controller)扩展正确的 Controller 类,其中包括必要的特征并且已经扩展了 Illuminate\Routing\Controller 类(别名为 BaseController)。

    【讨论】:

    • 现在,我看不到 {{$error}}。代码如下:code@if(count($errors)>0)
        @foreach($errors->all() as $error) {{ $error }} @endforeach
      @endif........我错过了什么吗?
    • 当验证失败时会发生这种情况?因为如果验证失败,ValidatesRequests trait 中的 validate 方法将使用输入和错误重定向回来。
    • 是的,当验证失败时,我没有看到任何错误消息.....我有一个文本输入,如果没有输入值,验证应该显示错误,例如 ' name field is需要'...
    • 如果你把它添加到你的视图{{ dump($errors) }},会有任何输出吗? (只需将它放在显示错误的代码之前。
    • 我在 {{ $error }} 之前放置了 {{ dump($errors) }} 并尝试了{{ dump($error) }} ....它没有显示任何错误当我将文本字段留空时......
    【解决方案2】:

    要显示错误,只需删除下面的行和结束 )}

    Route::group(['middleware' => ['web']], function(){
    

    从 5.2 开始,默认情况下,RouteServiceProvider 已经在 ['middleware'=>'web'] 的上下文中调用了 routes.php。 // 但是在 routes.php 默认生成的 auth 路由中,Route::group 调用默认情况下仍然发生 - 所以如果你删除那个 Route::group // 来自 routes.php 的声明应用程序会正确显示错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2016-11-05
      • 2018-10-12
      • 2017-09-03
      • 1970-01-01
      相关资源
      最近更新 更多