我想通过考试
$this->repo
我在controller中启动的,以便在自定义规则类中可用
EmployeeWorkingHours
我用它打电话
EmployeeRequest
,以便我可以从数据库中提取数据进行验证。
下面是我的代码示例:
控制器:
<?php
namespace Modules\ShopManager\Http\Controllers;
use App\Http\Controllers\Controller;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\ShopManager\Entities\Repository\Contract\ShopManagerRepository;
use Validator;
use Modules\ShopManager\Http\Requests\EmployeeRequest;
class EmployeesController extends Controller
{
public function __construct(ShopManagerRepository $repo)
{
$this->repo = $repo;
$this->middleware(function ($request, $next) {
$this->repo->setManagerId(Auth::id());
$this->shopId = $this->repo->getShopId();
if (!is_null($this->shopId)) {
$this->storagePath = 'images/shopmanager/shop/' . $this->shopId . '/employees';
} else {
abort(404);
}
return $next($request);
});
}
public function store(EmployeeRequest $request)
{
$data = $request->all();
...
...
}
}
员工要求:
<?php
namespace Modules\ShopManager\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Modules\ShopManager\Rules\EmployeeWorkingHours;
class EmployeeRequest extends FormRequest
{
public function rules()
{
return [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|email',
'from_hour' => ['required','numeric', new EmployeeWorkingHours],
'to_hour' => ['required','numeric', new EmployeeWorkingHours],
'status' => 'required|numeric',
'profile_image' => 'image',
];
}
public function messages()
{
return [
'profile_image.image' => 'Uploaded file is not an image.',
];
}
public function attributes()
{
return [
'first_name' => 'First Name',
'last_name' => 'Last Name',
'email' => 'Email'
];
}
public function authorize()
{
return true;
}
}
EmployeeWorkingHours:规则
<?php
namespace Modules\ShopManager\Rules;
use Illuminate\Contracts\Validation\Rule;
class EmployeeWorkingHours implements Rule
{
private static $from;
private static $to;
public function __construct()
{
}
public function passes($attribute, $value)
{
switch ($attribute) {
case 'from_hour':
self::$from = $value;
break;
case 'to_hour':
self::$to = $value;
return $this->_validate();
break;
}
}
public function message()
{
return 'Please select valid Time Interval From hour & To hour.';
}
private function _validate(){
return false;
}
}