作为示例,您可以使用自定义验证器类。
所以基本上我们有执行表单验证的控制器。
<?php
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Validator;
class ArticleController extends Controller
{
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store($id = 0)
{
$rules = [
'title' => 'required',
'body' => 'required',
'fileLink' => 'file_link',
];
$validator = Validator::make(Input::all(), $rules);
// process the login
if ($validator->fails()) {
return redirect()
->route('article.create')
->withErrors($validator);
} else {
//Other code
}
}
}
然后你必须创建自定义验证器:
<?php
namespace App\Validators;
class FileLinkValidator
{
public function validate($attribute, $value, $parameters, $validator)
{
$isValid = false;
$ch = curl_init($value);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($code == 200){
$allowedContentTypes = [
'image/jpeg'
];
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
if(in_array($contentType,$allowedContentTypes)){
$isValid = true;
}
}
curl_close($ch);
return $isValid;
}
}
注册验证器:
<?php
namespace App\Providers;
use Config;
use Illuminate\Support\ServiceProvider;
use Validator;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Validator::extend('file_link', 'App\Validators\FileLinkValidator@validate','File Link should be valid url and contain file');
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
然后您可以在控制器中下载文件并将其保存在磁盘上,并将所有元数据保存到数据库中。但是您必须执行另一个级别的验证,以便对用户更安全。