我想要扩展/为了每当有人成功登录到执行一些额外的代码覆盖在Confide
类(Confide on GitHub)的方法logAttempt
。这会比将相同的代码复制到调用logAttempt
的所有控制器更清洁。如何扩展Laravel 4中的类Confide?
我通过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:
非静态方法扩展\倾诉:: logAttempt()不应该被静态调用,假设$这个从不兼容背景
我真的需要我自己的ConfideServiceProvider
类吗?我也尝试过,但我不确定要在那里放置Confide使用我的扩展类。
难道没有简单的方法来扩展一小部分类吗?必须有,我只是在这里错过了一些东西。
我其实正在寻找一个可以进入的事件,但没有找到任何东西我稍后再尝试一下,如果它起作用,那将确实更清洁。 – Nick
这是我接受的答案,因为它以一种更简单的方式解决了我的实际问题,尽管我要求一种不同的解决方案,因为我不知道更好。它的工作原理和我正在使用它,只需要一个自己的类作为监听器(如下所述:http://four.laravel.com/docs/events#using-classes-as-listeners) – Nick