【发布时间】:2013-12-11 21:22:44
【问题描述】:
我想扩展/覆盖logAttempt 类Confide (Confide on GitHub) 中的方法,以便在有人成功登录时执行一些额外的代码。这比将相同的代码复制到调用logAttempt 的所有控制器更干净。
我在 stackoverflow 上阅读了 Laravel 文档和几个答案,但我就是无法正常工作。
我创建了一个新文件夹 app/extensions,其中包含一个名为 Confide.php 的文件:
<?php
namespace Extensions;
class Confide extends \Zizaco\Confide\Confide {
public function __construct(ConfideRepository $repo) {
die('no way!');
$this->repo = $repo;
$this->app = app();
}
public function logAttempt($credentials, $confirmed_only = false, $identity_columns = array()) {
die('yeah man!');
}
}
我将目录添加到我的app/start/global.php:
ClassLoader::addDirectories(array(
// ...
app_path().'/extensions',
));
我还将它添加到composer.json 并运行composer dump-autoload:
"autoload": {
"classmap": [
...,
"app/extensions"
]
},
我自己的 Confide 类似乎根本没有加载,因为 Confide 正常工作 - 从来没有 die()-ing。
如果我在包含命名空间的控制器中使用\Extensions\Confide::logAttempt($input, true);,我会得到这个ErrorException:
不应静态调用非静态方法 Extensions\Confide::logAttempt(),假设 $this 来自不兼容的上下文
我真的也需要我自己的ConfideServiceProvider 课程吗?我也试过了,但我完全不确定要放什么来让 Confide 使用我的扩展类。
没有简单的方法来扩展一个类的一小部分吗?一定有,我只是在这里遗漏了一些东西。
【问题讨论】: