Project-Flyer-8-Validating-and-Persisting-the-Flyer

跟随 Jeffrey Way 的视频学习,脑子不好,一些细节容易忘记,这里记录下来。相关视频在 laracasts.com
课程名称:Build “ProjectFlyer” With Me(08)

先进行一项可选操作:编辑输入框的样式

1.打开 /resources/views/flyers/create.blade.php,为 form 标签添加样式类型
class="col-md-6"

2.打开 /resources/assets/sass/app.scss,添加一行:
@import "partials/forms";

3.新建上一步引入的不存在的文件:
/resources/assets/sass/partials/forms.scss

.form-control{
height: 39px;
}

最后,在根目录下运行gulp,成功会更新 public 目录下的 app.css 文件。

下面进行必须的操作:

我们修改下数据库迁移文件
/database/migrations/2015_09_08_123123_create_flyer_photos_table.php,

$table->string('photo');

修改为

$table->string('path');

然后刷新数据库:

php artisan migrate:refresh

注意 flyer 控制器里的 store 方法,我们一般会在这里做这些事情:验证 form 表单的数据 => 将这些数据持久化(入库)=> 跳转页面。下面我们先创建一个对请求进行验证的类,Request:

php artisan make:request FlyerRequest

打开刚创建的文件\app\Http\Requests\FlyerRequest.php。

修改 authorize 方法:

public function authorize()
{
    return true;
}

修改 rules 方法:

public function rules()
{
    return [
        'street'        => 'required',
        'city'          => 'required',
        'zip'           => 'required',
        'country'       => 'required',
        'state'         => 'required',
        'price'         => 'required|integer',
        'description'   => 'required',
    ];
}

现在我们刷新 create 页面,什么都不填写,提交,此时应该会在表单底部显示 required 提醒。继续修改 form.blade.php,在每一个 input 表单的最后面都加上required,例如:

<input type="text" name="street" id="street" class="form-control" value="{{ old('street') }}" required/>

这样,在 Chrome 和 Firefox 里都可以 在当前行 required 提醒了。

下面我们实现表单数据持久化(入库):

打开 flyer 的控制器,添加一行引用:

use App\Http\Requests\FlyerRequest;

修改 store 方法:

public function store(FlyerRequest $request)
{
    App\Flyer::create($request->all());
}

为 Flyer 模型添加类成员变量:

protected $fillable = [
    'street',
    'city',
    'state',
    'country',
    'zip',
    'price',
    'description'
];

修改 form.blade.php,把 photo 的 input 先删除掉,修改控制器的 store 方法为:

public function store(FlyerRequest $request)
{
    Flyer::create($request->all());
    return redirect()->back();
}

刷新 create 页面 => 填写表单 => 提交 =>进入 tinker 看看:

php artisan tinker

App\Flyer::all();

命令应该显示刚才添加的数据。

0%