2014-01-27 47 views
11

你好朋友我是Laravel框架中的新人。Laravel Class'App Modules ServiceProvider'找不到?

我在应用程序文件夹中创建modules目录。

然后我还在模块目录中创建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; 
} 

} 

然后,我在模块目录中创建一个新的点目录。

并且还在点目录中创建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 

但后来不工作。

我也注册我的ServiceProvide在app.php像。

'providers' => array(
     'App\Modules\Points\ServiceProvider' 
), 

请告诉我在哪里做错了。

谢谢。

回答

15

我尝试运行代码,并且一切都很正常。

这是Laravel 4.1的全新安装

实验值:检查您的vendor/composer/autoload_classmap.php

<?php 

// autoload_classmap.php @generated by Composer 

$vendorDir = dirname(dirname(__FILE__)); 
$baseDir = dirname($vendorDir); 

return array(
    'App\\Modules\\Points\\ServiceProvider' => $baseDir . '/app/modules/points/ServiceProvider.php', 
    'App\\Modules\\ServiceProvider' => $baseDir . '/app/modules/ServiceProvider.php', 
    'BaseController' => $baseDir . '/app/controllers/BaseController.php', 
    'DatabaseSeeder' => $baseDir . '/app/database/seeds/DatabaseSeeder.php', 
    'HomeController' => $baseDir . '/app/controllers/HomeController.php', 
    'IlluminateQueueClosure' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php', 
    'SessionHandlerInterface' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php', 
    'TestCase' => $baseDir . '/app/tests/TestCase.php', 
    'User' => $baseDir . '/app/models/User.php', 
); 

composer.json

{ 
    "name": "laravel/laravel", 
    "description": "The Laravel Framework.", 
    "keywords": ["framework", "laravel"], 
    "license": "MIT", 
    "require": { 
     "laravel/framework": "4.1.*" 
    }, 
    "autoload": { 
     "classmap": [ 
      "app/commands", 
      "app/controllers", 
      "app/models", 
     "app/modules", 
      "app/database/migrations", 
      "app/database/seeds", 
      "app/tests/TestCase.php" 
     ] 
    }, 
    "scripts": { 
     "post-install-cmd": [ 
      "php artisan clear-compiled", 
      "php artisan optimize" 
     ], 
     "post-update-cmd": [ 
      "php artisan clear-compiled", 
      "php artisan optimize" 
     ], 
     "post-create-project-cmd": [ 
      "php artisan key:generate" 
     ] 
    }, 
    "config": { 
     "preferred-install": "dist" 
    }, 
    "minimum-stability": "stable" 
} 

app.php

<?php 
'providers' => array(

    'Illuminate\Foundation\Providers\ArtisanServiceProvider', 
    'Illuminate\Auth\AuthServiceProvider', 
    'Illuminate\Cache\CacheServiceProvider', 
    'Illuminate\Session\CommandsServiceProvider', 
    'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', 
    'Illuminate\Routing\ControllerServiceProvider', 
    'Illuminate\Cookie\CookieServiceProvider', 
    'Illuminate\Database\DatabaseServiceProvider', 
    'Illuminate\Encryption\EncryptionServiceProvider', 
    'Illuminate\Filesystem\FilesystemServiceProvider', 
    'Illuminate\Hashing\HashServiceProvider', 
    'Illuminate\Html\HtmlServiceProvider', 
    'Illuminate\Log\LogServiceProvider', 
    'Illuminate\Mail\MailServiceProvider', 
    'Illuminate\Database\MigrationServiceProvider', 
    'Illuminate\Pagination\PaginationServiceProvider', 
    'Illuminate\Queue\QueueServiceProvider', 
    'Illuminate\Redis\RedisServiceProvider', 
    'Illuminate\Remote\RemoteServiceProvider', 
    'Illuminate\Auth\Reminders\ReminderServiceProvider', 
    'Illuminate\Database\SeedServiceProvider', 
    'Illuminate\Session\SessionServiceProvider', 
    'Illuminate\Translation\TranslationServiceProvider', 
    'Illuminate\Validation\ValidationServiceProvider', 
    'Illuminate\View\ViewServiceProvider', 
    'Illuminate\Workbench\WorkbenchServiceProvider', 
    'App\Modules\Points\ServiceProvider' 
), 

app/modules/points/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"); 
    } 

} 

应用程序/模块/ 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; 
    } 

} 
+0

但我得到错误。而我用的laravel版本是4.1 –

+0

@renishkhunt你的代码和我的一样吗?检查你的'autoload_classmap.php' –

+0

谢谢你的'autoload_classmap.php',看着那里后,我想我正在修改错误的composer.json – 321zeno

4

一下添加到composer.json自动加载部分:

"psr-4": { 
    "App\\": "app/" 
} 

然后composer dump-autoload

+2

不,我得到了同样的错误。可以尝试使用'psr-0'代替 –

+0

。除非您有最新版本的Composer,否则'psr-4'将不起作用。因此,更''psr-0'或'作曲家自我更新' – Andreyco

3

我在创建包相当新手。在我创建以下结构后,我首次将其放入Vendor文件夹。

qplot 
    environment-color 
     src 
      config 
      QPlot 
       EnvironmentColor 
        ColorServiceProvider.php 
        EnvironmentColor.php 
     tests 

但很快我意识到这是没有意义的,因为Laravel不会自动加载所有你的包,除非你注册。所以我把文件夹移到/ app/vendor(新文件夹)。

,然后按照Andreyco的建议通知自动加载路径

"autoload": { 
    "classmap": [ 
     "app/commands", 
     "app/controllers", 
     "app/models", 
     "app/vendor", 
     "app/database/migrations", 
     "app/database/seeds", 
     "app/tests/TestCase.php" 
    ] 
}, 

,然后当我运行php artisan dump-autoload,开放vendor/composer/autoload_classmap.php,所有新类QPlot下注册:)

现在,当我回去供应商加入到Laravel /app/config/app.php

'providers' => array(
    'QPlot\EnvironmentColor\ColorServiceProvider' 

所以步骤

  • 设置你的包的文件夹在你的git会覆盖
  • 在作曲家注册自动加载
  • 作曲家转储自动加载
  • 添加提供程序来配置
  • 现在回去编码
0

在您的项目根路径中执行命令

作曲家转储自动加载

0

我最初的想法是作曲家自动加载,但它并没有感觉到我非常Laravel 5ish。 L5大量使用服务提供商,它们是引导您的应用程序的原因。

首先,我在我的app目录中创建了一个名为Helpers的文件夹。然后在Helpers文件夹中为我想添加的功能添加文件。拥有一个包含多个文件的文件夹可以避免一个大文件变得太长而难以管理。

接着我创建了一个HelperServiceProvider.php通过运行人员的命令:

人员化妆:提供商HelperServiceProvider或 PHP人员化妆:提供商HelperServiceProvider 在我加入这个片段寄存器方法

public function register() 
{ 
    foreach (glob(app_path().'/Helpers/*.php') as $filename){ 
     require_once($filename); 
    } 
} 

最后将服务提供商注册到提供商阵列中的config/app.php中

'providers'=> [ 'App \ P roviders \ HelperServiceProvider', ] 现在,您的Helpers目录中的任何文件都已加载,并可供使用。

UPDATE 2016年2月22日

这里有很多很好的选择,但如果我的回答对你的作品,我继续做了一个包,包括助手这样。您既可以使用该软件包获取灵感,也可以随时使用Composer下载它。它有一些经常使用的内置助手(但默认情况下它们都是非活动的),并允许您使用简单的Artisan生成器来创建自己的定制助手。它还解决了一个响应者使用映射器的建议,并允许您显式定义要加载的自定义助手,或默认情况下自动将所有PHP文件加载到助手目录中。反馈和PR非常感谢!

作曲家需要browner12 /帮手

相关问题