我按照互聯網上的教程進行操作,并使其作業。但是還是要呼叫方法。但是我們知道在LoginController中,像showLoginForm(),login(),如果你不添加這個,它仍然有效,因為它是在trait AuthenticatesUsers中定義的。
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
use AuthenticatesUsers;
}
我自己的特質,必須手動呼叫該方法。
應用\特征\MenuTrait.php
<?php
namespace App\Traits;
use Illuminate\Http\Request;
trait MenuTrait {
public function getMenus()
{
$menus[] = [
'id' => 'menu-dashboard',
'icon' => 'fas fa-home',
'name' => 'Dashboard',
'href' => route('lang.admin.dashboard'),
'children' => []
];
...
app\Http\Controllers\Admin\DashboardController.php
...
use App\Traits\MenuTrait;
class DashboardController extends Controller
{
use MenuTrait;
public function index()
{
$data['menus'] = $this->getMenus();
return view('ocadmin.dashboard', $data);
}
如何在不呼叫 trait 方法的情況下使其作業?
uj5u.com熱心網友回復:
特征用于重用代碼,而不是“無需呼叫即可使其作業”
為了讓它在你的例子中作業你應該做這樣的事情
trait MenuTrait {
// note that function renamed to fit routes
public function index()
{
$menus[] = [
'id' => 'menu-dashboard',
'icon' => 'fas fa-home',
'name' => 'Dashboard',
'href' => route('lang.admin.dashboard'),
'children' => []
];
// ...
$data['menus'] = $menus;
return view('ocadmin.dashboard', $data);
}
然后在控制器中你可以跳過功能index
// ...
use App\Traits\MenuTrait;
class DashboardController extends Controller
{
use MenuTrait;
// no function index here as its in trait
// other functions
}
現在當前端命中路線
Route::get('dashboard/menus/index', [DashboardController::class, 'index']);
php 將進入DashboardController并嘗試查找index定義在MenuTrait
同樣的事情LoginController
請注意,沒有人可以阻止您重寫 trait 方法,但請記住,您只能在一些跳舞的情況下使用重寫的方法,并且大多數時候您不想做這種事情
// routes.php
Route::get('some_path/index', [GuestDashboardController::class, 'index']);
// ...
use App\Traits\MenuTrait;
class GuestDashboardController extends Controller
{
use MenuTrait;
public function index(){
if (random_int(100, 999) < 600){
abort(403, 'no luck, bro');
}
return view('view_name', ['message'=>"we lost trait's index function"]);
}
// other functions
}
摘要:如果您希望能夠在不同的控制器中獲取選單-按原樣使用您的特征以不重復代碼,如果唯一目標是“不可見地呼叫方法”-特征與此無關(使控制器更清潔,將代碼放入控制器或服務類或單一動作類)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/490519.html
標籤:拉拉维尔
