【发布时间】:2019-06-08 17:08:32
【问题描述】:
所以,我有一个问题,虽然基于 Laravel,但最终可能只是我错过或忘记的 PHP 基础知识。或者它可能只是证明没有“教科书/干净/标准”的方式来做到这一点。
混乱的问题
无论如何,我在 Laravel 中创建了相当多的表单请求(它是一个相当大的“应用程序”),而且我经常对包含它们的不必要冗余感到震惊:
<?php
namespace App\Http\Controllers\Account;
use App\Http\Requests\SubscriberRequest;
use App\Http\Requests\SubscriberUpdateRequest;
use App\Http\Requests\SubscriberExtRequest;
use App\Http\Requests\SubscriberExtUpdateRequest;
class MailingListController extends BaseController
{
public function store(SubscriberRequest)
{
// code here
}
public function update(SubscriberUpdateRequest)
{
// code here
}
public function ExtCreate(SubscriberExtRequest)
{
// code here
}
public function ExtUpdate(SubscriberExtUpdateRequest)
{
// code here
}
}
另一种选择
将它放在上面可以消除控制器本身的混乱,但最终需要更多的工作来创建和维护。我发现这样做更容易:
<?php
namespace App\Http\Controllers\Account;
class MailingListController extends BaseController
{
public function store(\App\Http\Requests\SubscriberRequest)
{
// code here
}
public function update(\App\Http\Requests\SubscriberUpdateRequest)
{
// code here
}
public function ExtCreate(\App\Http\Requests\SubscriberExtRequest)
{
// code here
}
public function ExtUpdate(\App\Http\Requests\SubscriberExtUpdateRequest)
{
// code here
}
}
问题
显然,这两种方式中的任何一种都是“好的”和“有效的”。这几乎不是一个高度优先的问题。但是表单请求都来自同一个命名空间。当我使用几十个控制器时,打字/复制会变得乏味。
那么,考虑到所有这些,是否有一个“理想的”基于 PHP 类的解决方案来解决这个问题?而且,如果做不到这一点,我应该求助于应用程序范围的常量/变量吗? (或者还有其他人会推荐的技巧吗?)
【问题讨论】:
-
你可以有
use \App\Http\Requests;然后例如ExtUpdate(Requests\SubscriberExtUpdateRequest)作为中间立场 -
使用体面的 IDE 几乎可以自动完成所有
use语句的创建。它们仍然存在,但这不是任何问题,IDE 可以在您键入时自动生成它们。在顶部有许多这样的导入/使用语句在许多语言中都很常见。 -
@JonStirling 我之前实际上已经在控制器顶部附近看到过那条线,但无论出于何种原因,包含它的开发人员从未真正做过“第二步”,所以它对我来说从来没有意义.感谢您的启迪。
标签: php laravel class namespaces