EDIT
In the meantime this question is been visited a few times. Just to share what I´ve learned with the help of stackoverflow and other resources I´d not recommend using the technique I was asking for. A cleaner way is to attach a variable containing the database-text within the controller:
$txt = Model::find(1);
return view('name', array('text' => $txt->content);
Now you can access text in your view like so
{{ $text ?? 'Default' }}
But if you´re currently also hustling with basic oop and/or mvc architecture read on. Maybe it helps :-)
ORIGINAL QUESTION
I´m trying to output some text loaded from db. This is my setup:
View:
{{ ContentController::getContent('starttext') }}
Controller:
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;
}
}
I was trying various ways to declare a class variable and access it in my function but I always end up with:
tbh I think I lack some basic oop knowledge :-D
Static methods do not have access to $this
. $this
refers to an instantiated class (an object created with a new
statement, e.g. $obj = new ContentController()
), and static methods are not executed within an object.
What you need to do is change all the $this
to self
, e.g. self::$text
to access a static variable defined in your class. Then you need to change public $text = '';
to public static $text = '';
This is why static methods/variables are bad practices most of the time...
Not an expert at Laravel, but I'm sure you don't need to use static methods to pass variables into templates... If that is the case, I'm staying the hell away from Laravel...
You may try something like this (In the case of 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;
}
}
Read the other answer to understand the difference; also read about Late Static Bindings but instead...
You may try something like this in Laravel
to avoid static
:
class ContentController extends BaseController {
public $text = null;
public function getContent($description)
{
$content = Content::where('description', $description)->first();
return $this->text = $content->text;
}
}
Use it like this:
{{ App::make('ContentController')->getContent('starttext') }}
Also this:
{{ with(new ContentController)->getContent('starttext') }}
Or this (Even without Laravel
):
{{ (new ContentController)->getContent('starttext') }}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With