我正在使用Laravel 5,并且对于Traits文件在Laravel 5目录结构中的放置位置感到困惑。它们应该存在于public、resources或任何其他目录中吗?
在放置trait方面,您应该像处理类一样对待它们。这意味着将它们放在app
目录中。您将trait放置在其中的位置取决于您的偏好和trait的实际用途。
重要的是调整trait的命名空间以符合目录结构。例如,如果您的trait与控制器有关,并决定将其放在app/Http/Controllers
文件夹中,请确保它具有正确的命名空间,即:
namespace App\Http\Controllers;
我希望在应用程序中创建一个名为Traits的目录。这将增强代码库的可读性和可维护性。
示例:
namespace App\Traits;
use Exception;
use Illuminate\Http\Request;
trait myTrait {
//your code here
}
例如:你想要创建一个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();
}
}
存储特征
为了方便起见,在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.
}
}