Hello Friends我是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目录中创建一个新的point目录。
并在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'
),
请告诉我哪里犯了错误。
谢谢。答案 0 :(得分: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'
),
应用/模块/点/ 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;
}
}
答案 1 :(得分:5)
将此添加到composer.json
自动加载部分:
"psr-4": {
"App\\": "app/"
}
然后composer dump-autoload
答案 2 :(得分: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'
所以步骤是
答案 3 :(得分:1)
我有同样的问题。
问题出在文件:./bootstrap/cache/config.php
我已将其删除,一切开始正常工作:rm ./bootstrap/cache/config.php
我位于docker的基础设施已经在PHP容器中运行了该命令。
答案 4 :(得分:1)
首先更新您的作曲家,它将纠正错误
$ composer update
答案 5 :(得分:0)
在项目根路径中执行命令
composer dump-autoload
答案 6 :(得分:0)
我最初的想法是作曲家自动加载,但它对我来说并不觉得非常Laravel 5ish。 L5大量使用服务提供商,它们是引导您的应用程序的。
首先,我在app目录中创建了一个名为Helpers的文件夹。然后在Helpers文件夹中我添加了我想要添加的函数的文件。拥有一个包含多个文件的文件夹可以让我们避免使用一个太长且无法管理的大文件。
接下来,我通过运行artisan命令创建了一个HelperServiceProvider.php:
artisan make:提供者HelperServiceProvider或 php artisan make:provider HelperServiceProvider 在注册方法中,我添加了这个片段
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
require_once($filename);
}
}
最后在provider / app.php中的providers数组中注册服务提供程序
'providers'=&gt; [ '应用程序\供应商\ HelperServiceProvider', ] 现在,Helpers目录中的任何文件都已加载,可供使用。
更新2016-02-22
这里有很多不错的选择,但如果我的回答对你有用,我就会继续做这个包括帮助者的方案。您可以使用该软件包获取灵感,也可以随意使用Composer下载它。它有一些我经常使用的内置帮助程序(但默认情况下都是非活动状态)并允许您使用简单的Artisan生成器创建自己的自定义帮助程序。它还解决了一个响应者使用映射器的建议,并允许您显式定义要加载的自定义帮助程序,或者默认情况下,自动加载帮助程序目录中的所有PHP文件。反馈和PR非常感谢!
作曲家需要browner12 / helpers
答案 7 :(得分:0)
在AgentServiceProvider.php的此行顶部添加
使用代理;
喜欢:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Agent;