“Method [show] does not exist” 是什么意思?(涉及IT技术)

4
我刚开始接触Laravel 4,试图找出为什么会出现一个错误提示说方法 [show] 不存在。 我没有一个名为“show”的方法,我只能想象这是一个内部的Laravel方法,但我不知道如何影响它或是什么可能导致了这个问题。如果您有任何想法或者帮助,将不胜感激,因为我已经被困在这里两天了,也无法发现我的错误所在。
视图:
<li><a href="{{ URL::route('account-sign-in') }}">Sign in</a></li>

路由:

/*Sign In (GET)*/
    Route::get('/account/sign-in', array(
        'as'    => 'account-sign-in',
        'uses'  => 'AccountController@getSignIn'
    ));

账户控制器:

class AccountController extends BaseController { 
  public function getSignIn(){ 
    return View::make('user.signIn'); 
  } 

  public function postSignIn(){ 
    $validator = Validator::make(Input::all(), array( 'email' => 'required|email', 'password' => 'required' ) ); 
    if($validator->fails()){ /*Redirect to the sign in page*/ 
      return Redirect::route('account-sign-in') ->withErrors($validator) ->withInput();
    } 
    else { /*Attempt user sign in*/ 
      $remember = (Input::has('remember')) ? true : false;
      $auth = Auth::attempt(array( 'email' => Input::get('email'), 'password' => Input::get('password'), 'active' => 1 ), $remember); 
      if($auth){ 
        /*Redirect to the intended page*/ return Redirect::intended('/'); 
      } 
      else {
        return Redirect::route('account-sign-in')->with('global', 'Email/password wrong, or account not activated.'); 
      } 
    } 
    return Redirect::route('account-sign-in') ->with('global', 'There was a problem signing you in.'); 
  } 
}

1
请展示 Xdebug 堆栈跟踪。 - mpm
不确定那是什么。这里是最后5个事件 - [2014-03-16 20:44:07] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'syntax error, unexpected '}'' in C:\xampp\htdocs\local\tbf3\app\controllers\AccountController.php:6 Stack trace: #0 [internal function]: Illuminate\Exception\Handler->handleShutdown() #1 {main} [] [] [2014-03-16 20:45:01] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Class 'BasesController' not found' in C:\xampp\htdocs\local\tbf3\app\controllers\AccountController.php:3 - mario
我注意到它说“未找到类BasesController”。我没有任何名为BasesController的控制器,也没有任何引用它的控制器。有什么想法吗? - mario
以下是出现错误信息时的调试消息: 19. BadMethodCallException …\vendor\laravel\framework\src\Illuminate\Routing\Controller.php266 18. Illuminate\Routing\Controller __call <#unknown>0 17. AccountController show <#unknown>0 16. call_user_func_array …\vendor\laravel\framework\src\Illuminate\Routing\Controller.php231 15. Illuminate\Routing\Controller callAction …\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php93 14. Illuminate\Routing\ControllerDispatcher call …\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php62 - mario
1
@gv0029 您需要包含整个AccountController,或者至少包括类声明行以及其他相关的代码片段。 - TonyArra
3个回答

1
我遇到了这个问题。我之前列出了一个(现在已被弃用的)资源,导致routes.php文件中发生了冲突。
Route::resource('scheduler', 'SchedulerController');
Route::get('scheduler/notices', 'SchedulerController@notices');

1
“Method [show] does not exist”是什么意思?你在问题中提供的代码没有显示任何关于“show()”方法的内容。根据你的评论,你没有扩展“BaseController”,但所有的控制器都应该扩展“BaseController”,而且“BaseController”应该扩展“Controller”,所以你的“BaseController”应该像这样(默认情况下):
class BaseController extends Controller {

   /**
    * Setup the layout used by the controller.
    *
    * @return void
    */
    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }
    }
}

您的控制器应该像这样扩展它:
class AccountController extends BaseController {

    // Define all of your methods
    // including show() if you are using it

}

感谢您的输入,不幸的是,情况并非如您所说,因为我已经按照您上面指出的方式设置了我的控制器。 - mario
1
也许你应该解释一下具体情况,因为我只是从你的问题和评论中得到了这些信息 :-) - The Alpha
通常来说,Laravel相当简单:你创建一个视图,创建一个路由,再创建一个控制器。上述路由、控制器和视图对我来说都很有意义(我只粘贴了与此视图相关的部分),但是似乎还有其他问题。所以我的下一个想法是,这里可能有比简单的视图->路由->控制器更复杂的情况。我想知道是否有人有任何想法。当然,也可能是我在上面写的有明显的错误,但是欢迎大家提出看法和建议! - mario

1

听起来你在 AccountController 的第一行只是有一个错别字

它可能写成了 class AccountController extends BasesController {

BasesController 应该改为 BaseController


我也曾这么想,但已经检查过了:<?php class AccountController extends BaseController { public function getSignIn(){... - mario
1
@ gv0029 尝试在您的项目根目录中运行命令 php artisan dump-autoload。自动加载的类(例如控制器/模型)有时会导致错误,如果您更改它们的类名而不转储自动加载,则可能会出现问题。 - TonyArra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接