【发布时间】:2014-06-05 14:06:25
【问题描述】:
编辑
与此同时,这个问题被访问了几次。只是为了分享我在 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;
}
}
我尝试了各种方法来声明一个类变量并在我的函数中访问它,但我总是得到:
不在对象上下文中使用 $this
tbh 我认为我缺乏一些基本的 oop 知识 :-D
【问题讨论】:
-
视图没有对控制器类的显式访问(
$this在该上下文中不存在)。这是一个基本的 MVC 原则,将逻辑(控制器)与表示(视图)分离。文档非常清楚地显示了这个示例:View::make('greeting', array(...stuff here...))其中“stuff”是您需要从控制器传递给视图的任何内容。让我这样说吧:阅读文档 (laravel.com/docs/responses)。 -
另外,您应该首先从有关 PHP OOP 的文档 (php.net/manual/en/language.oop5.php) 开始。你写的代码毫无意义。
-
坚持 MVC 原则时,您绝对是对的。但是为什么不使用 Laravel 强大的路由系统来渲染一些没有用户输入的简单视图呢?
-
如果是
Route::get '/' return View::make('homepage'),那么可以,不要过度设计。这不仅仅是关于用户输入。您在控制器中拥有 Eloquent DB 访问权限,该控制器具有以 Blade 视图响应的方法。请不要在routes.php中进行 Eloquent 查询。请做单独的逻辑、表示和数据存储。