PHP/Laravel magic,这是如何工作的?
我正在查看Laravel文档,我看到了以下片段:PHP/Laravel magic,这是如何工作的?,php,laravel,Php,Laravel,我正在查看Laravel文档,我看到了以下片段: class UserController extends BaseController { /** * The layout that should be used for responses. */ protected $layout = 'layouts.master'; /** * Show the user profile. */ public function
class UserController extends BaseController {
/**
* The layout that should be used for responses.
*/
protected $layout = 'layouts.master';
/**
* Show the user profile.
*/
public function showProfile()
{
$this->layout->content = View::make('user.profile');
}
}
我们可以清楚地看到$this->layout='layouts.master'。然而,他们定义了layout对象的子对象(据我所知,它只是一个基本PHP字符串,没有名为content的字段,通过
$this->layout->content=View::make('user.profile');
为什么不看看BaseController?看起来他们改变了布局
为什么不看看BaseController呢?看起来他们改变了布局
该代码段自身无法工作。可能是另一个类正在更改$layout
(通过setter方法)或该代码段完全错误。链接到找到该代码段的文档?这是他所指的文档。该代码段自身无法工作。或者是另一个类正在更改$layout
(通过setter方法)或者代码片段完全错了。链接到你找到这个的文档?这是他所指的文档。+1表示“检查其来源”和“糟糕的设计”。我不会走到糟糕的设计。乍一看,这很混乱,但这是一个非常简单的修复方法。您可以将受保护的$layout='layouts.master';更改为受保护的$view='layouts.master';并检查setupLayout中的视图是否不为null。如果他们很难更改此设置,对我来说糟糕的设计将是。@mschuett,是的,您可以更改它,这可能是一个很好的设计(至少更好)。但事实上,它是一个已发布的框架,设计和记录的方式令人困惑。但我们只是在争论“设计”的定义,我想我们都同意应该有所不同。我的主要语言是Java,这种事情是不允许的。对我来说,这似乎是糟糕的设计。+1表示“检查其源代码”和“糟糕的设计”。我不会走到糟糕的设计。乍一看,这很混乱,但这是一个非常简单的修复方法。您可以将受保护的$layout='layouts.master';更改为受保护的$view='layouts.master';并检查setupLayout中的视图是否不为null。如果他们很难更改此设置,对我来说糟糕的设计将是。@mschuett,是的,您可以更改它,这可能是一个很好的设计(至少更好)。但事实上,它是一个已发布的框架,设计和记录的方式令人困惑。但我们只是在争论“设计”的定义,我想我们都同意应该有所不同。我的主要语言是Java,这类东西是不允许的。对我来说,这似乎是糟糕的设计。
<?php
class BaseController extends Controller {
/**
* Setup the layout used by the controller.
*
* @return void
*/
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
}
}