【发布时间】:2015-05-11 13:05:09
【问题描述】:
我正在使用 Laravel 5,我对在 Laravel 5 目录结构中放置特征文件的位置感到困惑。它们应该存在于公共、资源或任何其他目录中吗?
【问题讨论】:
我正在使用 Laravel 5,我对在 Laravel 5 目录结构中放置特征文件的位置感到困惑。它们应该存在于公共、资源或任何其他目录中吗?
【问题讨论】:
在放置方面,您应该将特征视为类。这意味着将它们放在app 目录中。您将特征放在哪里取决于您的偏好和特征的实际目的。
重要的是您将特征的命名空间调整为目录结构。例如,如果您的 trait 与您的控制器有关,并且您决定将其放在 app/Http/Controllers 文件夹中,那么请确保它具有正确的命名空间,即:
namespace App\Http\Controllers;
【讨论】:
例如:你想创建一个 Traits 目录Traits >> SayHello.php。
<?php
namespace App\Http\Controllers\Traits;
trait SayHello{
public function hello()
{
return "Hello";
}
}
<?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();
}
}
【讨论】:
我更喜欢在应用程序中创建一个名为 Traits 的目录。 这将增强代码库的可读性和可维护性。
例子:
namespace App\Traits;
use Exception;
use Illuminate\Http\Request;
trait myTrait {
//your code here
}
【讨论】:
存储特征
为方便起见,在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.
}
}
【讨论】: