我在Laravel 4工作台中创建了一个包,它在我的机器上就像一个魅力。一切都按预期加载但现在在另一台机器上我得到了Class not found例外。
我有什么:
composer.json(root)
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"workbench"
],
"files": [
"app/helpers.php"
]
},
请注意列出了工作台目录。
在workbench目录中,我有供应商和包文件夹: 工作台/ krynble / contenter
Inside是常规包结构,但最重要的是还有另一个composer.json文件(在生成包时创建):
"autoload": {
"classmap": [
"src/migrations"
],
"psr-0": {
"Krynble\\Contenter\\": "src/"
}
},
因此,我在其中按照步骤创建了文档中引用的服务提供商
workbench / krynble / contenter / src / Krynble / Contenter / ContenterSerivceProvider.php(也是自动生成)并将其保留为创建状态,仅使用如下引导方法:
public function boot()
{
$this->package('krynble/contenter');
}
寄存器:
public function register()
{
//
}
提供:
public function provides()
{
return array();
}
将此服务提供程序添加到提供程序列表中的app.php,并在引导函数中调用die()显示它正在被调用。
最后,我创建了我的实用程序类:
工作台/ krynble / contenter / SRC / Krynble / Contenter /服务/映射器/ MediaMapperSerivce.php
<?
namespace Krynble\Contenter\Services\Mappers;
class MediaMapperService {
...
}
最后,在我的控制器中:
<?php
use Krynble\Contenter\Services\Mappers\MediaMapperService;
class MediaController extends BaseController {
private $mediaMapperService;
public function __construct(MediaMapperService $mediaMapperService)
{
$this->mediaMapperService = $mediaMapperService;
}
尼斯!它在我的机器上工作(带有ubuntu的流浪盒)!但是在mac笔记本上它没有工作(所以我放弃了区分大小写的东西)。
任何线索?有什么办法调试?我疯了,在每一点上都死了(),似乎无法找到源头。
我应该在服务提供商的offer方法中添加一些内容吗?如果是这样,为什么它在我的机器上工作而不添加它?
答案 0 :(得分:3)
在挖掘日志之后,我发现问题是最奇怪的:本地计算机中的short_open_tag设置设置为1,在我的QA环境中设置为0。
文件未被解析(但没有引发错误),我得到的类不存在消息。