【发布时间】:2013-04-17 17:50:56
【问题描述】:
我正在生成一个选择菜单,其中包含单个模型中的所有行,并且我提出了 3 种不同的解决方案 - 但我很难决定哪一个最有意义并遵循MVC / Laravel 最佳实践。
模型状态
states table:
id abbr name
1 AL Alabama
2 AK Alaska
3 AZ Arizona
4 AR Arkansas
etc.
解决方案 #1: 从控制器中的模型中检索所有状态,执行逻辑以在控制器中生成状态数组,将其传递给视图,并使用传入数组的 laravel 表单类生成选择菜单。
*控制器:my_controller.php*
public function get_index()
{
$states = State::all();
foreach ($states as $state)
{
$states_array[$state->id] = $state->name;
}
return View::make('my_view')->with('states_array',$states_array);
}
*查看:my_view.php*
{{ Form::select('state_id',$states_array); }}
解决方案 #2: 从控制器中的模型中检索所有状态,将检索到的状态模型传递给视图,执行逻辑以在视图中生成状态数组,并使用带有结果数组的 laravel 表单类生成选择菜单。
*控制器:my_controller.php*
public function get_index()
{
$states = State::all();
return View::make('my_view')->with('states',$states);
}
*查看:my_view.php*
@foreach ($states as $state)
$states_array[$state->id] = $state->name;
@endforeach
{{ Form::select('state_id',$states_array); }}
解决方案#3: 向状态模型添加一个 all_array()(或可选地全部扩展)方法,该方法会拉取所有状态记录,执行逻辑以创建数组并返回结果数组。在控制器中调用所述方法并将其传递给视图。使用传入数组的 laravel 表单类生成选择菜单。
*型号:my_model.php*
public static function all_array()
{
$states = self::all();
foreach ($states as $state)
{
$states_array[$state->id] = $state->name;
}
return $states_array;
}
*控制器:my_controller.php*
public function get_index()
{
$states = State::all_array();
return View::make('my_view')->with('states',$states);
}
*查看:my_view.php*
{{ Form::select('state_id',$states); }}
那么这 3 种解决方案中的哪一种最有意义并且更紧密地遵循 MVC / Laravel 最佳实践? (可选)是否有比上述 3 种更好的解决方案?
非常感谢任何和所有的回复!
【问题讨论】:
-
一般来说,我把模型分成不同的部分。其中之一是逻辑部分。其他包括验证、数据库查询和任何其他需要的因素。我会提出一个新的解决方案作为#4,你将逻辑放在一个单独的类中。 (使其以后更易于维护)。
-
@itachi 你有这方面的例子可以给我看吗?
标签: php model-view-controller laravel eloquent laravel-3