在 Laravel 5 中放置特征的位置


Where to place traits in Laravel 5?

我正在使用Laravel 5,我对在Laravel 5目录结构中放置特征文件的位置感到困惑。它们应该存在于公共、资源或任何其他目录中吗?

在放置方面,你应该像对待类一样对待特征。这意味着将它们放在app目录中。你把你的特质放在哪里取决于你的偏好和特质的实际目的。

重要的是,您需要根据目录结构调整 trait 的命名空间。例如,如果你的特质与你的控制器有关,并且你决定把它放在app/Http/Controllers文件夹中,那么请确保它有正确的命名空间,即:

namespace App'Http'Controllers;

我更喜欢在应用程序中创建一个名为Traits的目录。这将增强代码库的可读性和可维护性。

例:

namespace App'Traits;
use Exception;
use Illuminate'Http'Request;
    trait myTrait {
    //your code here
    }

您可以将特征放置在任何您想要的位置。但是在放置方面,您应该将 trait 的命名空间调整为目录结构。

例如:您要创建一个特征目录Traits >> SayHello.php

应用程序>> Http>>控制器>>特征>>说你好.php

  <?php
  namespace App'Http'Controllers'Traits; 
  trait SayHello{
        public function hello()
        {
              return "Hello";
        }
  }

应用程序>> Http>>控制器>> HomeController .php

  <?php
  namespace App'Http'Controllers; 
  use App'Http'Requests;
  use Illuminate'Http'Request;
  use App'Http'Controllers'Traits'SayHello;
  class HomeController extends Controller {
        use SayHello;
        public function index()
        {
              // Called SayHello trait hello method
              return $this->hello();
        }
  }

存储特征

为方便起见,在app下创建一个名为 Traits 的目录,并将我的自定义 PHP 文件放在那里。每个文件都使用特征的名称进行逻辑关联。通过在每个文件中使用 App/Traits 命名空间,当我在另一个文件中use我的文件时,框架能够找到我的文件。

示例使用代码:

<?php
namespace AppJobs;
use App/Jobs/Job;
use App/Traits/ExampleCode;
/**
 *  brief Example code using a Trait in a Laravel "Job"
 */
class AdminLoginJob extends Job implements SelfHandling
{
    use ExampleCode;
    /**
     * Call trait to print something. Note the use of "$this".
     * 
     * @return void
     */
    public function __construct()
    {
        $this->printThis();
    }
   /**
     * Do more stuff here.
     * 
     * @return void
     */
     public function handle()
    {
        // never gets called in this example.
    }
}