2014-02-07 62 views
1

我正在創建一個小型Web應用程序,並且有一些類似基本功能的控制器,如用戶配置文件檢索和類似功能。初始化通用控制器變量的最佳實踐?

目前,每一個動作都對這些方法的調用。
我想移動它們以獲得更好的代碼結構。

但我不知道最好的做法是什麼。在我看來,有兩種做法:

  • (使用connect法)創建抽象父控制器方法和濾波器之前
  • 使用從每個繼承控制器打電話給他們(可以在訪問類的變量?)

沒有爲「基地」控制器的一個要求,它必須接收的Silex應用的一個實例。

我希望有一個更簡單的方法來做到這一點。
預先感謝每一個提示。

+0

我想親自與父抽象基本控制器一起 - 似乎是最適合我的想法。 – CD001

回答

1

我可能會像這樣的東西去:

class BaseController { 
    $user = null; 

    public function __contruct() { 
     $this->user = someFunctionToGetUser(); 
    } 
} 

class Controller1 extends BaseController { 
    public function someFunction1() { 
     // $this->user is set and accessible here 
    } 
} 

class Controller2 extends BaseController { 
    public function someFunction2() { 
     // $this->user is set and accessible here too 
    } 
} 

class Controller3 extends BaseController { 
    public function someFunction3() { 
     // $this->user is set and accessible here too also 
    } 
} 

很顯然,我沒有對自己目前的架構或當前代碼的想法,但你的想法。

編輯:

更新關於Silex要求。

其實我有寫在Silex的一個API。該應用程序的前端控制器位於/web/index.php中。 index.php文件看起來是這樣的:

$app = require __DIR__.'/../bootstrap.php'; 
$app->run(); 

bootstrap.php中看起來是這樣的:

require __DIR__ . '/vendor/autoload.php'; 
$app = new Silex\Application(); 
require APP_ROUTES . 'Ranges.php'; 
return $app; 

併成立Ranges.php最多的例子是:

$app->get('/ranges', function() use ($app) { 
    // some code to generate results 
    return $app->json($results); 
} 

您可以輕鬆地設置您的課程將使用$ app(the silex實例),與我爲路線所做的相同。

+0

感謝您的回覆。我已經爲我的問題添加了新的信息。我需要控制器中的Silex應用程序實例。 – CSchulz

0

我使用controlles in classes並使用父類具有這種結構

class ParentSample 
{ 
    protected $app = null; 

    public function __construct(Application $app=null) { 
    if (!is_null($app)) { 
     $this->initialize($app); 
    } 
    } 

    protected function initialize(Application $app) 
    { 
    $this->app = $app; 
    } 
} 

在擴展類的控制器,如果需要延伸initialize()和控制器內第一叫它:

class SubClass extends ParentClass 
{ 
    protected function initialize(Application $app) 
    { 
    parent::initialize($app); 

    // further initialization 
    } 

    public functin ControllerSample(Application $app) 
    { 
    $this->initialize($app); 

    // controller response ... 
    } 
}