处理将用于扩展Chatter包
的应用程序问题是,我想对软件包进行修改但不想直接对软件包进行修改。在composer update
根据我的理解,扩展包需要我从自动加载中排除特定文件并加载我自己的文件/目录......
composer.json
我对composer.json进行了更改以适应Mac / Unix和Windows文件路径语法:
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"exclude-from-classmap": [
"vendor/devdojo/chatter/src/Controllers/ChatterDiscussionController.php",
"vendor/devdojo/chatter/src/Models/Discussion.php",
"vendor\\devdojo\\chatter\\src\\Controllers\\ChatterDiscussionController.php",
"vendor\\devdojo\\chatter\\src\\Models\\Discussion.php"
],
"psr-4": {
"App\\": "app/",
"Forum\\": "app/forum"
}
},
文件夹结构
.
+-- app
| +-- Console
| +-- Exceptions
| +-- Forum
| +-- Chatter
| +-- Controllers
| +-- ChatterDiscussionController.php
| +-- Models
| +-- ...
| +-- Helpers
| +-- Http
| +-- ...
+-- bootstrap
+-- ...
自定义ChatterDiscussionController.php
<?php
namespace Forum\Chatter\Controllers;
use Auth;
use Carbon\Carbon;
use DevDojo\Chatter\Events\ChatterAfterNewDiscussion;
use DevDojo\Chatter\Events\ChatterBeforeNewDiscussion;
use DevDojo\Chatter\Models\Models;
use Event;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as Controller;
use Validator;
use App\User;
class ChatterDiscussionController extends Controller
{...
测试
为了测试这一点,我在我的自定义DiscussionController中放置了dd("Custom")
,在DiscussionController的包版本中放置了dd("Original")
。正如您可能已经猜测的那样,这继续触及DiscussionController的包版本。
我实现此功能的唯一方法是将特定文件添加到自动加载部分"files": ["app/Helpers/Chatter.php"]
中的文件密钥 &lt; ~~这是一个示例 。一旦我开始扩展越来越多的包,这将是一个管理的噩梦。根据我的理解,这可以通过创建ServiceProvider来完成,但是我无法找到使用该方法使其工作的合适示例。
以前有人有这个问题吗?解决了什么?非常感谢任何正确方向的帮助。