我正在使用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.
}
}