我正在尝试开发一个包,所以我一直遵循本教程直到Creating a Facade
部分,因为我不需要facade。
问题是:
/app/routes.php
Route::get('test', 'AristonaInstallerInstaller@install');
引发异常:Call to undefined method AristonaInstallerInstaller::callAction()
我的Installer.php
是这样的:
workbench/aristona/installer/src/Aristona/Installer/Installer.php
<?php namespace AristonaInstaller;
class Installer
{
public static function install()
{
return "Hello";
}
}
类正在加载。我已将其添加到我的服务提供商列表中。另外,我可以通过再添加一个install method
来确认它正在加载,因为PHP在两次重新声明同一方法时抛出了一个致命错误。
我在我的方法前缀上尝试了不同的组合(例如没有静态)无法解决。
有人知道我做错了什么吗?
您收到错误,因为您试图使用路由到不存在的控制器。更具体地说,Laravel正试图从其核心控制器类中执行此方法
/**
* Execute an action on the controller.
*
* @param string $method
* @param array $parameters
* @return SymfonyComponentHttpFoundationResponse
*/
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控制器路由的更多信息,请访问此处。
要解决此问题,您应该在包中添加一个控制器,或者在另一个控制器中使用Installer类。