[英]Laravel: Get access to class-variable from public static function (basic oop issues)
編輯
與此同時,這個問題被訪問了幾次。 只是為了分享我在 stackoverflow 和其他資源的幫助下學到的東西,我不建議使用我要求的技術。 更簡潔的方法是在控制器中附加一個包含數據庫文本的變量:
$txt = Model::find(1);
return view('name', array('text' => $txt->content);
現在您可以像這樣訪問視圖中的文本
{{ $text ?? 'Default' }}
但是,如果您目前也在忙於基本的 oop 和/或 mvc 架構,請繼續閱讀。 也許它有幫助:-)
原問題
我正在嘗試輸出一些從 db 加載的文本。 這是我的設置:
看法:
{{ ContentController::getContent('starttext') }}
控制器:
class ContentController extends BaseController {
public $text = '';
public static function getContent($description)
{
$content = Content::where('description', $description)->get();
$this->text = $content[0]->text;
return $this->text;
}
}
我嘗試了各種方法來聲明一個類變量並在我的函數中訪問它,但我總是得到:
tbh 我想我缺乏一些基本的 oop 知識:-D
你可以嘗試這樣的事情(在static
的情況下):
class ContentController extends BaseController {
public static $text = null;
public static function getContent($description)
{
$content = Content::where('description', $description)->first();
return static::$text = $content->text;
}
}
閱讀其他答案以了解差異; 還閱讀了Late Static Bindings但相反......
你可以在Laravel
嘗試這樣的事情來避免static
:
class ContentController extends BaseController {
public $text = null;
public function getContent($description)
{
$content = Content::where('description', $description)->first();
return $this->text = $content->text;
}
}
像這樣使用它:
{{ App::make('ContentController')->getContent('starttext') }}
還有這個:
{{ with(new ContentController)->getContent('starttext') }}
或者這個(即使沒有Laravel
):
{{ (new ContentController)->getContent('starttext') }}
靜態方法無權訪問$this
。 $this
指的是一個實例化的類(一個用new
語句創建的對象,例如$obj = new ContentController()
),並且靜態方法不在對象內執行。
您需要做的是將所有$this
更改為self
,例如self::$text
以訪問類中定義的靜態變量。 然后你需要改變public $text = '';
到public static $text = '';
這就是為什么靜態方法/變量在大多數情況下都是不好的做法......
不是 Laravel 的專家,但我確定您不需要使用靜態方法將變量傳遞到模板中...如果是這種情況,我將遠離 Laravel...
在 Laravel 5.7 中, or
運算符已被刪除,因此{{ $text or 'Default' }}
不再起作用。 新的運營商是??
. 從 Laravel 5.7 開始,它應該是{{ $text ?? 'Default' }}
{{ $text ?? 'Default' }}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.