2014-02-25 21 views
-1

我正在舉一個例子來簡化問題: 如果您正在實施Facebook,您希望將用戶信息與帳戶信息,帖子,從from分開,這意味着將會有用戶模型,用戶信息模型,帖子模型,for for模型。構建在PHP框架中的控制器

現在如果你去用戶配置文件,它會加載所有這些模型的信息,問題是你將如何構造控制器,當然你需要每個模型的控制器來定義它的獨特的動作,但我該如何處理渲染? 我做了一個新的控制器,照顧所有的渲染?或者我只是把渲染配置文件在用戶控制器 - 這意味着它可以訪問其他模型 - 或者我把每個控制器渲染它自己,然後將它們合併在一起... 或者如果你有更好的進場?

我只是不知道我想到的每種方法的後果,我不知道是否有更好的方法,我沒有想到。

+0

您不需要每個型號的控制器。控制器實現將路由映射到哪些方法,並在模型內處理所有邏輯。您可以擁有簡單表示表/模型關係的模型。你的問題也是廣泛的。您可以使用某個佈局管理器來處理由適當的視圖類進行的渲染,該佈局管理器將標記所有4個框架。您可以讓控制器渲染擴展布局視圖的部分視圖。 –

回答

1

正如其他人提到的,您不需要專門爲每個模型設置控制器。但是,鑑於您的Facebook示例,it's quite simply done through relationships

過於簡單化是:

用戶模型來保存用戶的賬戶信息和關係

class User extends Eloquent { 
    public function posts() { 
     return $this->hasMany('posts', 'from_user_id'); 
    } 
} 

一個Post模型保存的內容和從/向用戶關係

class Post extends Eloquent { 
    public function from() { 
     return $this->belongsTo('user', 'from_user_id'); 
    } 

    public function to() { 
     return $this->belongsTo('user', 'to_user_id'); 
    } 
} 

那麼也許你會有UserController像這樣加載一個視圖:

class UserController extends BaseController { 
    public function index($id) { 
    $user = User::find($id); 
    return View::make('user_page', array(
     'user' => $user, 
     'posts' => $user->posts()->with('to')->get() 
    ));   
    } 
} 
+0

你讓我的一天 –

1

當然,你需要控制器爲每個模型來定義它獨特的動作

不,這是不對的。

控制器是表示層的一部分,有人可能會說你需要每個視圖對象的控制器,但對於模型層,它與你擁有的控制器的數量無關。

a View是一個對象,它切換多個模板,並且這與控制器無關,渲染是視圖的責任。 瞭解更多,看看here,herehere

這些是真正有用的信息開始。

+0

我的問題是,我不能輕易理解沒有例子,我看到很多來源,嘗試解釋的概念,甚至所提供的來源引起我同樣的頭痛,當我知道如果有人剛剛提供給我的名字我將使用的控制器,然後我會開始捕捉這個概念。 –

+0

你是什麼意思'我將使用的控制器的名稱' –

0

錯誤的答案 - 控制器不是表示層的一部分 - 它們是傳輸層的一部分。他們的任務是對HTTP請求做出反應。 請求派遣路由器。爲了證明Laravel的來源。控制器是路由包的一部分。當你調用,例如:

Route::get("/","HomeController"); 

你只是登錄請求參數RouteCollection。但一切都發生在路由器。控制器可以不存在任何類型的視圖層。

+0

首先這是一個評論不是答案,第二,你是混淆控制器與路由器! –

+0

檢查[此解釋](http://stackoverflow.com/questions/12429729/controller-belongs-to-the-presentation-layer),所以你可能會在閱讀它後得到它。 –

+0

呵呵Java不是PHP,如果你不知道。你看看Laravel的來源? – carousel