[英]Controllers structuring in PHP frameworks
我將舉一個例子來使這個問題更容易:如果您正在實施facebook,則希望將用戶信息與帳戶信息,帖子,信息來源分開,這意味着將有一個用戶模型,一個用戶模型。信息,帖子模型,for模型。
現在,如果您轉到用戶配置文件,它將從所有這些模型中加載信息,問題是如何構造控制器,當然每個模型都需要控制器來定義其唯一動作,但是我該如何處理渲染? 我要制作一個可以處理所有渲染的新控制器嗎? 還是我只是將渲染配置文件放在用戶控制器中-這意味着它將可以訪問其他模型-還是我要在每個控制器中放置它自己的渲染然后將它們組合在一起...或者如果您有更好的方法?
我只是不知道我想到的每種方法的后果,而且我也不知道是否有我沒有想到的更好的方法。
正如其他人提到的,您不需要專門針對每種模型的控制器。 但是,以您的Facebook為例, 這很簡單地通過關系來完成 。
過於簡單化是:
用於保存用戶帳戶信息和關系的用戶模型
class User extends Eloquent {
public function posts() {
return $this->hasMany('posts', 'from_user_id');
}
}
用於保存內容以及與用戶之間的往來關系的帖子模型
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()
));
}
}
錯誤的答案-控制器不是表示層的一部分-控制器是傳輸層的一部分。 他們的任務是響應HTTP請求。 請求由Router分派。 為了證明這一點,請看一下Laravel的源代碼。 控制器是路由包的一部分。 例如,當您致電時:
Route::get("/","HomeController");
您只是在RouteCollection中注冊請求參數。 但是,一切都在Router內部發生。 控制器可以不帶任何類型的視圖層而存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.