修改
与此同时,这个问题被访问了几次。只是为了分享我在stackoverflow和其他资源的帮助下学到的东西,我不建议使用我要求的技术。更简洁的方法是在控制器中附加包含数据库文本的变量:
$txt = Model::find(1);
return view('name', array('text' => $txt->content);
现在您可以像这样访问视图中的文字
{{ $text or '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;
}
}
我正在尝试各种方法来声明一个类变量并在我的函数中访问它,但我总是最终得到:
我认为我缺乏一些基本的oop知识:-D
答案 0 :(得分:3)
静态方法无法访问$this
。 $this
是指实例化的类(使用new
语句创建的对象,例如$obj = new ContentController()
),并且静态方法不在对象中执行。
您需要做的是将所有$this
更改为self
,例如self::$text
访问您班级中定义的静态变量。然后,您需要将public $text = '';
更改为public static $text = '';
这就是为什么静态方法/变量在大多数时候都是不好的做法......
不是Laravel的专家,但我确定您不需要使用静态方法将变量传递到模板中......如果是这样的话,我会留下地狱来自Laravel ...
答案 1 :(得分:2)
您可以尝试这样的事情(在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') }}
答案 2 :(得分:1)
在Laravel 5.7中,or
运算符已被删除,因此{{ $text or 'Default' }}
不再起作用。
新的运算符是??
。从Laravel 5.7开始,它应该是{{ $text ?? 'Default' }}