【问题标题】:Laravel/PHP Shorthand for Namespaces PathsLaravel/PHP 命名空间路径的简写
【发布时间】: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


【解决方案1】:

如果你使用的是 php 7+

这是保持命名空间包含整洁的好方法。

use some\namespace\{ClassA, ClassB, ClassC as C};

【讨论】:

  • 这实际上是一个我不知道的非常棒的技巧,而且效果很好。并且缺少一些 Laravel 式的魔法 a la mutators 和 accessors,我敢说这和它会得到的一样好。谢谢。
  • 我的荣幸。如果您仍然卡在任何一点,请告诉我。谢谢
  • php.net/manual/en/language.namespaces.importing.php 以获取有关该主题的完整参考
猜你喜欢
  • 2012-09-02
  • 2018-05-05
  • 1970-01-01
  • 2011-12-29
  • 2019-01-02
  • 2018-03-15
  • 1970-01-01
  • 2017-12-13
  • 2015-07-05
相关资源
最近更新 更多