我想要擴展/爲了每當有人成功登錄到執行一些額外的代碼覆蓋在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