簡體   English   中英

Laravel 5.0-在basecontroller中調用使用嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM