解决 Laravel 中
$request->none
方法不存在的问题
在 Laravel 开发中,有时会遇到
$request->none
方法不存在的问题。这是因为 Laravel 的
IlluminateHttpRequest
类并没有提供方法。介绍几种解决这个问题的方法,并提供相应的代码示例。
1. 使用方法的反向逻辑
Laravel 的类提供了方法来检查请求中是否存在某个参数。我们可以利用这个方法的反向逻辑来实现方法的功能。
phpif (!request()->has('parameter_name')) {// 参数不存在时的处理逻辑}
示例代码
假设我们有一个表单提交,需要检查和是否都不存在:
phpif (!request()->has('email') && !request()->has('phone')) {// email 和 phone 都不存在时的处理逻辑}
2. 自定义类
如果需要频繁使用方法,可以考虑自定义一个类,并在其中添加方法。
创建自定义类
创建一个新的类:
bashphp artisan make:request CustomRequest
修改
CustomRequest
类
在生成的
CustomRequest
类中添加方法:
phpnamespace AppHttpRequests;use IlluminateFoundationHttpFormRequest;
class CustomRequest extends FormRequest{public function none(array $Keys){foreach ($keys as $key) {if ($this->has($key)) {return false;}}
return true;}// 其他方法和验证规则
使用自定义类
在控制器中使用自定义的
CustomRequest
类:
phpnamespace AppHttpControllers;use AppHttpRequestsCustomRequest;
class ExampleController extends Controller{public function store(CustomRequest $request){if ($request->none(['email', 'phone'])) {// email 和 phone 都不存在时的处理逻辑}}}
3. 扩展类
另一种方法是扩展
IlluminateHttpRequest
类,并添加方法。
创建扩展类
创建一个新的扩展类:
phpnamespace AppHttp;use IlluminateHttpRequest as BaseRequest;
class Request extends BaseRequest{public function none(array $keys){foreach ($keys as $key) {if ($this->has($key)) {return false;}}
return true;}
注册扩展类
在
AppServiceProvider
中注册扩展类:
phpnamespace AppProviders;use IlluminateSupportServiceProvider;use AppHttpRequest as CustomRequest;
class AppServiceProvider extends ServiceProvider{public function register(){$this->app->bind('IlluminateHttpRequest', CustomRequest::class);}
public function boot(){//}
使用扩展类
在控制器中直接使用扩展后的类:
phpnamespace AppHttpControllers;use IlluminateHttpRequest;
class ExampleController extends Controller{public function store(Request $request){if ($request->none(['email', 'phone'])) {// email 和 phone 都不存在时的处理逻辑}}}
通过以上几种方法,我们可以在 Laravel 中实现类似方法的功能,从而更好地处理请求中的参数检查问题。能对你的开发工作有所帮助。
请问,php中的$_REQUEST是什么意思啊?
php中有$_request与$_post、$_get用于接受表单数据,当时他们有何种区别,什么时候用那种最好。
一、$_request与$_post、$_get的区别和特点 $_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。
通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得 二、$_post、$_get的区别和特点1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。
用户看不到这个过程。
3. 对于get方式,服务器端用获取变量的值,对于post方式,服务器端用获取提交的数据。
4. get传送的数据量较小,不能大于2KB。
post传送的数据量较大,一般被默认为不受限制。
但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。
举例:mypage?id=1这种就是GET方式传值,可以用$_request和$_get接受传值。
笔记本一连到网络就出现414request-uri too large nginx
#客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区,#请求头总长度大于128k时使用large_client_header_buffers设置的缓存区client_header_buffer_size 128k;#large_client_header_buffers 指令参数4为个数,128k为大小,默认是8k。
申请4个128k。
large_client_header_buffers 4 128k;当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request错误。
php中request与get
一,\n是换行符号,说明参数只传到id就结束了。
二,这里写成$uid=$_GET[id];可以吗? 是可以的,但是$_REQUEST[id]可以取到POST方法过来的值,而$_GET[id]只能取到url里面添加的GET传值方法。
比如?id=10 三,\r\n,用处就是换行。
发表评论