在Laravel 5中应将特征放在哪里?

59

我正在使用Laravel 5,并且对于Traits文件在Laravel 5目录结构中的放置位置感到困惑。它们应该存在于public、resources或任何其他目录中吗?

4个回答

76

在放置trait方面,您应该像处理类一样对待它们。这意味着将它们放在app目录中。您将trait放置在其中的位置取决于您的偏好和trait的实际用途。

重要的是调整trait的命名空间以符合目录结构。例如,如果您的trait与控制器有关,并决定将其放在app/Http/Controllers文件夹中,请确保它具有正确的命名空间,即:

namespace App\Http\Controllers;

这个可能应该标记为正确答案。我在为模型创建特征时遵循了相同的约定。 - mchljams

20

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

示例:

namespace App\Traits;

use Exception;
use Illuminate\Http\Request;

    trait myTrait {
    //your code here
    }

7

你可以将trait放置在任何位置。但是在放置时,你应该根据目录结构调整trait的命名空间。

例如:你想要创建一个Traits目录 Traits >> SayHello.php

app >> Http >> Controllers >> Traits >> SayHello.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();
        }
  }

3

存储特征

为了方便起见,在app下创建一个名为Traits的目录,并将我的自定义PHP文件放置在其中。每个文件都使用Trait的名称进行逻辑关联。通过在每个文件中使用命名空间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.
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接