[英]Laravel 5.0 - Calling the use in basecontroller?
這是我的Controller.php,所有其他Controller都從此擴展。 我希望那樣做
<?php
namespace App\Http\Controllers;
use App\User;
use App;
use URL;
use App\City;
use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
abstract class Controller extends BaseController {
use DispatchesCommands, ValidatesRequests;
}
但是看起來不起作用。 我需要在使用它的每個控制器中調用use App\\User
,即使它擴展了basecontroller。
這不起作用:
<?php
namespace App\Http\Controllers;
class HomeController extends Controller { .... }
但這確實是:
namespace App\Http\Controllers;
use App\User;
use App;
use URL;
use App\City;
class HomeController extends Controller { .... }
這正常嗎? 它是否一定很痛苦:-)每個控制器中都使用了一些類,所以每次都需要調用它們有點令人驚訝。
注意:我正在從4.2遷移,並想使用命名空間謝謝!
我建議您從php手冊中閱讀此頁面: http : //php.net/manual/en/language.namespaces.importing.php
考慮以下代碼:
<?php
namespace App;
use App\User;
class MyClass extends Controller
{
public function __construct()
{
new User(); // we refer to the App\User
}
}
//another file
<?php
namespace App\AnotherNamespace;
class MySecondClass extends Controller
{
public function __construct()
{
new User(); // I refer to App\AnotherNamespace\User
}
}
在上面的示例中,我將兩個User都用作參考。 但是我期望一個不同的對象類型。
希望您現在能更好地理解它。 考慮一個好的IDE! 那將是您的最佳解決方案。 按下“ Ctrl->空格”並在鍵入“用戶”時查看結果非常有用。 只需按一下鍵盤上的幾個按鈕,就可以完成:)
PS。 如果您來自4.2,我建議您直接更新到5.1,因為不再支持5.0。 Laravel 5.1是LTS版本,因此具有更長的支持!
不幸的是,這是不可能的,因為您不能“繼承” use
語句。 以下注釋摘自有關使用名稱空間的PHP文檔:Aliasing / Importing :
注意:
導入規則是基於文件的,這意味着包含的文件將不會繼承父文件的導入規則。
因此,您需要根據需要在每個文件中聲明use
語句。
導入是在編譯時而不是在運行時完成的。 這不是特定於PHP的東西,例如Java import
語句和C# using
語句未“繼承”,因為它們沒有被編譯,編譯器僅在編譯時使用它們來解析名稱空間。 這些語句有助於避免在代碼中使用完全限定的名稱空間,這通常會使代碼過於冗長且可讀性差。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.