在Laravel 5中,如何将数据传递到FormRequest类?
背景
我试图验证来自HTML select元素的get变量 .
我这样做是通过继承FormRequest并添加到rules数组 . 我想从文件列表中动态构建此验证规则以保持DRY .
将此列表传递给FileFormRequest的最佳方法是什么?
app / Http / Controllers / UploadController.php(请原谅公共 property )
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Requests\FileFormRequest;
use App\Http\Controllers\Controller;
use File;
class UploadController extends Controller
{
public $files = [];
public function get(FileFormRequest $request)
{
$files_dir = storage_path('app').'/spreadsheets';
foreach (File::allFiles($files_dir) as $file) {
$file = $file->getBasename();
$this->files[$file] = $file;
}
return view('main', array(
'title' => '',
'file_names' => $this->files,
'file_name' => '',
'sheet_name' => '',
'encoding' => 'UTF-8'
));
}
}
应用程序/ HTTP /请求/ FileFormRequest.php
<?php namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Response;
class FileFormRequest extends FormRequest
{
public function rules()
{
// What goes here in place of the empty array?
$files = implode(',', []);
return [
'file_name' => 'sometimes|required|in:'.$files,
];
}
public function authorize()
{
return true;
}
}
2 回答
你可以试试这个:
如果
form_field_name
不是数组,则根据其包含的值将其设为数组 . 此外,如果需要大量代码,您可以创建另一个protected
方法来从请求获取输入,例如:所以你现在能够在
rules
方法中调用这个方法,如下所示:好的我解决了这个问题
将上传文件列表功能移动到实用程序界面和类中
使用服务提供者将实用程序类的实例公开为服务
将服务注入Controller和FormRequest类
代码是:
app / Contracts / Utilities / UploadFilesContract.php - 创建界面
app / Utilities / UploadFiles.php - 创建具有列表功能的类
app / Providers / UploadFilesServiceProvider.php - 将接口绑定到类的实例
app / Http / Controllers / UploadController.php - 在构造函数中注入上传的文件界面
app / Http / Requests / FileFormRequest.php - 在构造函数中注入上传的文件接口
config / app.php - 注册提供者