大家好,我是Laravel框架的新手。
我在app文件夹中创建模块目录。
然后我也创建ServiceProvider.php文件在模块目录。
我的文件结构像。
app\modules\ServiceProvider.php
这是ServiceProvider.php的代码。
<?php
namespace App\Modules;
abstract class ServiceProvider extends \Illuminate\Support\ServiceProvider {
public function boot() {
if ($module = $this->getModule(func_get_args())) {
$this->package("app/" . $module, $module, app_path() . "/modules/" . $module);
}
}
public function register() {
if ($module = $this->getModule(func_get_args())) {
$this->app["config"]->package("app/" . $module, app_path() . "/modules/" . $module . "/config");
// Add routes
$routes = app_path() . "/modules/" . $module . "/routes.php";
if (file_exists($routes))
require $routes;
}
}
public function getModule($args) {
$module = (isset($args[0]) and is_string($args[0])) ? $args[0] : null;
return $module;
}
}
然后在modules目录下创建一个新的points目录。
并在points目录下创建ServiceProvider.php文件。
这是ServiceProvider.php文件代码。
<?php
namespace App\Modules\Points;
class ServiceProvider extends \App\Modules\ServiceProvider {
public function register() {
parent::register("points");
}
public function boot() {
parent::boot("points");
}
}
然后,现在我尝试加载项目,我得到了错误一样。
Class 'App\Modules\ServiceProvider' not found
Symfony\Component\Debug\Exception\FatalErrorException
…/app/modules/points/ServiceProvider.php5
我还在composer.json文件中添加了autoload entery。
"autoload": {
"classmap": [
"app/modules"
]
},
然后也运行此命令。
composer dump-autoload
但之后就不是工作了
我还在app.php中注册了ServiceProvide,如。
'providers' => array(
'App\Modules\Points\ServiceProvider'
),
请告诉我哪里做错了。
谢谢。
8条答案
按热度按时间eqfvzcg81#
我试着运行你的代码,一切都很好。
这是Laravel 4.1的新安装
观察结果:检查您的
vendor/composer/autoload_classmap.php
composer.json
app.php
app/modules/points/ServiceProvider.php
app/modules/ServiceProvider.php
gcuhipw92#
我也有同样的问题。
问题出在文件里:
./bootstrap/cache/config.php
我已经删除了它,一切都开始工作:
rm ./bootstrap/cache/config.php
我的基础设施位于docker中,我在PHP容器中运行了该命令。
bq8i3lrv3#
将以下内容添加到
composer.json
自动加载部分:然后是
composer dump-autoload
w7t8yxp54#
我在创建包方面是个新手。第一次创建以下结构后,我把它放在Vendor文件夹中。
但很快我就意识到这是没有意义的,因为Laravel不会自动加载所有的包,除非你注册它。所以我将文件夹移动到/app/vendor(新文件夹)。
然后按照Andreyco的建议通知自动加载路径
然后,当我运行
php artisan dump-autoload
,并打开vendor/composer/autoload_classmap.php
时,QPlot下的所有新类都被注册了:)现在,当我回去添加提供程序到Laravel
/app/config/app.php
时,所以步骤是
idfiyjo85#
在项目根路径中执行命令
composer dump-autoload
cbeh67ev6#
我最初的想法是 composer 自动加载以及,但它没有感觉很Laravel 5 ish给我。L5大量使用服务提供者,他们引导你的应用程序。
首先,我在应用程序目录中创建了一个名为Helpers的文件夹。然后,在Helpers文件夹中,我添加了我想要添加的函数的文件。拥有一个包含多个文件的文件夹可以让我们避免一个大文件变得太长和难以管理。
接下来,我通过运行artisan命令创建了一个HelperServiceProvider.php:
artisan make:provider HelperServiceProvider或php artisan make:provider HelperServiceProvider在register方法中,我添加了以下代码片段
最后,在providers数组中的config/app.php中注册服务提供程序
'providers' => [ 'App\Providers\HelperServiceProvider',]现在您的Helpers目录中的任何文件都已加载,并且可以使用。
2016-02-22最新动态
这里有很多好的选择,但是如果我的答案对你有用,我继续做了一个包,以这种方式包含助手。你可以使用这个包来获得灵感,也可以随意下载Composer。它有一些我经常使用的内置助手(但默认情况下都是不活动的),并允许您使用简单的Artisan生成器制作自己的自定义助手。它还解决了一个响应者使用Map器的建议,并允许您显式定义要加载的自定义helper,或者默认情况下,自动加载helper目录中的所有PHP文件。反馈和公关非常感谢!
composer 需要browner 12/helpers
afdcj2ne7#
将此行添加到AgentServiceProvider.php的顶部
使用代理;
例如:
Source
gxwragnw8#
找不到Laravel类'App\Modules\ServiceProvider'
需要添加“模块\”:“Modules/”psr-4 part in your root composer.json file