最近,我一直只为我的L5包创建模型,但现在我想尝试引入一个Controller.我一直在关注这个,但我总是得到错误"Class StatController does not exist".
文件夹结构
/src
routes.php
/Controllers
StatController.php
Run Code Online (Sandbox Code Playgroud)
StatController.php
<?php namespace Enchance\Sentrysetup\Controllers;
use App\Http\Controllers\Controller;
class StatController extends Controller {
public function index() {
return 'Moot.';
}
}
Run Code Online (Sandbox Code Playgroud)
服务提供者
public function register()
{
// Can't get this to work
include __DIR__.'/routes.php';
$this->app->make('Enchance\Sentrysetup\Controllers\StatController');
$this->app['sentrysetup'] = $this->app->share(function($app) {
return new Sentrysetup;
});
}
Run Code Online (Sandbox Code Playgroud)
routes.php文件
Route::get('slap', 'StatController@index');
Run Code Online (Sandbox Code Playgroud)
有没有人有另一种方法将控制器分配给L5包?
Ste*_*man 10
您无需呼叫$this->app->make()控制器.控制器由Laravel的IoC自动解决(意味着Laravel自动创建/实例化与路由相关的控制器).
boot()在自定义程序包服务提供程序的函数中包含您的路由:
public function boot()
{
include __DIR__.'/routes.php';
}
Run Code Online (Sandbox Code Playgroud)
在你的routes.php档案里面:
Route::group(['namespace' => 'Enchance\Sentrysetup\Controllers'], function()
{
Route::get('slap', ['uses' => 'StatController@index']);
})
Run Code Online (Sandbox Code Playgroud)
另外,只是一个提示.你应该PascalCase您的命名空间:
Enchance\SentrySetup\Controllers
Run Code Online (Sandbox Code Playgroud)
注意设置中的大写S.
该boot()方法应该用于注册你的路由,因为当Laravel启动时,它会遍历你config/app.php文件中的每个服务提供者,创建它们,调用register()方法(将服务提供者"提供"的任何依赖项插入到Laravel的singleton/IoC容器中) .
然后,Laravel再次通过它们并调用该boot()方法.这可确保boot()方法中提供服务提供者所需的任何依赖项.