gpt4 book ai didi

php - 如何在 Laravel 中扩展外观?

转载 作者:行者123 更新时间:2023-12-03 09:27:45 26 4
gpt4 key购买 nike

我尝试在 Laravel 4 中扩展 Facede,但在尝试调用方法时只收到下一个错误。

Non-static method App\Libraries\Theme::setActive() should not be called statically

编辑

在@Antonio的回复后,要将方法更改为静态,请在方法内使用关键字$ this->的权力。

Symfony\Component\Debug\Exception\FatalErrorException 使用$this 不在 $active = $this->ensureRegistered($active); 中的对象上下文中时;

我的代码:

<?php namespace App\Libraries;

use Cartalyst\Themes\Facades\Theme as ThemeBag;

class Theme extends ThemeBag {

/**
* Sets the active theme.
*
* @param mixed $active
* @return Cartalyst\Themes\ThemeInterface
*/
public static function setActive($active)
{
$active = $this->ensureRegistered($active);

if ( ! isset($this->themes[$active->getSlug()]))
{
$this->register($active);
}

$this->active = $active;

include $this->getActive()->getPath() . '\\helpers\\composers.php';
}
}

最佳答案

基本上,您必须扩展现有的 Facade:

<?php namespace AntonioRibeiro\Libraries;

class MyEventFacade extends Illuminate\Support\Facades\Event {

/**
* Sets the active theme.
*
* @param mixed $active
* @return Cartalyst\Themes\ThemeInterface
*/
public static function setActive($active)
{
/// do what you have to do
}

}

然后替换(或将其添加为新的)到您的 app/config/app.php:

'aliases' => array(

'App' => 'Illuminate\Support\Facades\App',
...
// 'Event' => 'Illuminate\Support\Facades\Event',
'Event' => 'AntonioRibeiro\Libraries\MyEventFacade',
...
'File' => 'Illuminate\Support\Facades\File',
'ActiveSession' => 'AntonioRibeiro\Facades\ActiveSessionFacade',

),

不要忘记执行“composer dump-autoload”。

我无权访问这些 Cartalyst 主题,但您收到的错误与您未创建为静态的方法有关:

public function setActive($active)
{
}

应该是

public static function setActive($active)
{
}

您会在这里找到一些关于它的好信息(创建一个扩展请求“Facade”的类):http://fideloper.com/extend-request-response-laravel

关于php - 如何在 Laravel 中扩展外观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16953460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com