试图创建我的第一个包,但获取未定义的方法callAction()异常

时间:2014-04-10 22:04:46

标签: laravel laravel-4 composer-php

我正在尝试开发一个软件包,因此我已经跟this tutorial一直到Creating a Facade部分,因为我不需要外观。

问题是:

/app/routes.php
Route::get('test', 'Aristona\Installer\Installer@install');

抛出异常:Call to undefined method Aristona\Installer\Installer::callAction()

我的Installer.php是这样的:

workbench/aristona/installer/src/Aristona/Installer/Installer.php
<?php namespace Aristona\Installer;

class Installer
{
    public static function install()
    {
        return "Hello";
    }
}

班级正在加载。我已将其添加到我的服务提供商列表中。此外,我可以通过添加一个install method来确认它正在加载,因为PHP会因重新声明同一方法两次而引发致命错误。

我在方法前缀上尝试过不同的组合(例如没有静态)不能解决。

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

您收到错误是因为您尝试使用路由到不存在的控制器。更具体地说,Laravel正试图从它的核心Controller类中执行这个方法:

/**
 * Execute an action on the controller.
 *
 * @param string  $method
 * @param array   $parameters
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function callAction($method, $parameters)
{
    $this->setupLayout();

    $response = call_user_func_array(array($this, $method), $parameters);

    // If no response is returned from the controller action and a layout is being
    // used we will assume we want to just return the layout view as any nested
    // views were probably bound on this view during this controller actions.
    if (is_null($response) && ! is_null($this->layout))
    {
        $response = $this->layout;
    }

    return $response;
}

因此,除非您在Route::get()中指定的类正在扩展BaseController或Controller,否则将抛出此异常。如果你在一个闭包中测试了相同的方法,那就可以了。

可以找到有关Laravel控制器路由的更多信息here

要解决此问题,您应该在程序包中添加一个控制器,或者在另一个控制器中使用Installer类。