【问题标题】:Laravel Routing/controllerLaravel 路由/控制器
【发布时间】:2014-07-20 17:16:10
【问题描述】:

我决定从 CI 迁移到 laravel,但我在理解插入数据库然后加载记录的基本表单的正确实现时遇到了一些麻烦。我的表单调用我的控制器方法,它处理输入数据并保存它,但我觉得我应该使用模型来处理这个。这是我的代码:

Routes.php

Route::get('neworder', 'HomeController@neworder');

Route::post('submitorder', 'HomeController@submitorder');

HomeController.php

public function neworder()
{
    return View::make('neworder');
}
public function submitorder()
{
    $order = new Order;
    $order->name = Input::get('name');
    $order->email = Input::get('email');
    $order->save();
    $orders = Order::all();
    return View::make('orders')->with('orders', $orders);

}

neworder.blade.php

@extends('layout')
@section('content')
    {{ Form::open(array('action' => 'HomeController@submitorder')) }}
    <?php
    echo Form::text('email');
    echo Form::text('name');
    echo Form::submit('Submit');
    ?>
    {{ Form::close() }}
@stop

【问题讨论】:

标签: php laravel model controller routing


【解决方案1】:

听起来你所拥有的东西正在发挥作用,这很棒。不过,您可以进行一些改进。

其中之一是实现repository pattern,这会将控制器中的代码更改为如下内容:

public function submitorder()
{
    if($this->_orderRepository->save(Input::all()) {
        $orders = $this->_orderRepository->all();
        return View::make('orders')->with('orders', $orders);
    } else {
        return View::make('orders')->with('errors', $this->_orderRepository->errors());
    }
}

上面的代码假定验证逻辑存在于订单存储库中。这是可以接受的,但有悖于单一责任原则;您的存储库应该只知道如何在数据库中创建/检索/更新实体。验证可以改为存在于validator service

如果您确实实现了验证服务,它不会对上面的submitorder 函数产生太大影响(而不是$this-&gt;_orderRepository-&gt;save,您将调用$this-&gt;_orderForm-&gt;save),这是一个好兆头。它使控制器内部的逻辑保持简洁,您通过添加字段对订单模型所做的任何更改对您的控制器的影响绝对为零,并且您在情绪上处于一个更好的位置,因为您不会熬夜担心你的东西会坏掉的。

【讨论】:

  • 谢谢!但我想知道我是否应该使用模型来插入数据而不是使用控制器方法,或者我有什么好的做法?使用 CI,我总是从我的控制器调用我的模型方法。
  • 最佳实践是遵循存储库模式。您仍然使用模型插入数据,但来自存储库。这样你就可以保留插入控制器的逻辑并保持两者解耦
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2023-03-27
  • 2023-03-27
  • 2014-01-24
  • 2017-03-05
  • 2019-12-12
相关资源
最近更新 更多