laravel笔记-请求与响应

27 篇文章 0 订阅
17 篇文章 0 订阅

laravel笔记-请求与响应

写在前面

时间可贵,善用目录↑

学习Laravel的笔记,仅仅是作为laravel文档笔记,目的是强化对文档的理解,质量不高。


预备知识

Jsonp:利用script标签绕过同源策略,获得一个类似这样的数据,jsonpcallback是页面存在的回调方法,参数就是想得到的json。

同源策略:不允许从一个源加载的文档或脚本,获取或设置另一个源加载的文档的属性


什么是请求(Request)和响应(Response)

这个大多数框架都大同小异.

浏览器->请求->服务器->响应->浏览器


关于请求


//判断输入值是否出现
if ($request->has('name')) {

}

//获取所有输入值
$input = $request->all();
//获取单个输入值,第二个参数是默认值
$name = $request->input('name', 'Sally');
//获取数组形式的输入
$input = $request->input('products.0.name');
$names = $request->input('products.*.name');
//如果表单包含 name 字段
$name = $request->name;
//请求支持json,还可以通过.解析
$name = $request->input('user.name');
//取出(排除)输入数据的子集
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');

/*文件操作*/
/*详情参看UploadedFile的API文档*/
//获取上传的文件,例如name='photo'
$file = $request->file('photo');
$file = $request->photo;
//判断是否存在文件
if ($request->hasFile('photo')) {
    //
}
//判断文件是否上传成功
if ($request->file('photo')->isValid()){
    //
}
//文件的路径
$path = $request->photo->path();
//文件的扩展名
$extension = $request->photo->extension();
//保存文件,第一个是路径不包含文件名,二是磁盘,选配
$path = $request->photo->store('images', 's3');


/*还有一些骚操作*/

//取出上次请求数据
$username = $request->old('username');
//从请求中取出Cookies
$value = $request->cookie('name');

关于响应(Response)

基础响应

/*响应的类型*/
//可以是字符串、数组
Route::get('/', function () {
    return 'Hello World';
});

//也可以是Response对象
Route::get('home', function () {
    return response('Hello World', $status)
        ->header('Content-Type', $value);
});

//更常用的则是返回一个视图View,第二个参数是数据,具体在view笔记中。
return response()->view('hello', $data, 200)->header('Content-Type', $type);

//有时候则需要返回json
return response()->json(['name' => 'Abigail', 'state' => 'CA']);
//有时候的有时候需要Jsonp响应
//就是加一个回调函数
return response()->json(['name' => 'Abigail', 'state' => 'CA'])
    ->withCallback($request->input('callback'));

Response杂七杂八的方法

响应头

Response 实例允许你自定义响应的 HTTP 状态码和头信息。

//这样
return response($content)
    ->header('Content-Type', $type)
    ->header('X-Header-One', 'Header Value')
    ->header('X-Header-Two', 'Header Value');
//或者这样
return response($content)
    ->withHeaders([
        'Content-Type' => $type,
        'X-Header-One' => 'Header Value',
        'X-Header-Two' => 'Header Value',
    ]);

Cookie

类似于响应头,也可以添加cookie到响应

return response($content)
    ->header('Content-Type', $type)
    ->cookie('name', 'value', $minutes);

重定向的杂七杂八

重定向也是比较关键的功能了

Route::get('dashboard', function () {
    //这里是重定向到URL
    return redirect('home/dashboard');
    //也可以重定向到路由
    //这里注意不带参数的redirect()方法会返回一个RedirectResponse实例
    //第二个参数是路由需要的参数
    return redirect()->route('profile', ['id'=>1]);
    //第二个参数也可以是需要的Eloquent模型
    return redirect()->route('profile', [$user]);

});

//也可以是返回上一页(也是重定向的一种)
Route::post('user/profile', function () {
    // 验证请求...
    return back()->withInput();
});

//当然也可以是控制器动作,第二个是参数
return redirect()->action('UserController@profile', ['id'=>1]);

session

类似于Response,RedirectResponse可以携带session

Route::post('user/profile', function () {
    // 更新用户属性...
    //with()中就是session~
    return redirect('dashboard')->with('status', 'Profile updated!');
});

文件处理

//文件下载
return response()->download($pathToFile);
//文件路径(包含文件名),文件名(用户看到的),请求头信息
return response()->download($pathToFile, $name, $headers);


//打开文件,图片或PDF直接打开
return response()->file($pathToFile);
return response()->file($pathToFile, $headers);

骚操作

响应宏

定义一个自定义的可以在多个路由和控制器中复用的响应。
使用Response门面上的macro方法

namespace App\Providers;

use Response;
use Illuminate\Support\ServiceProvider;

class ResponseMacroServiceProvider extends ServiceProvider
{
    /**
     * Perform post-registration booting of services.
     *
     * @return void
     */
    public function boot()
    {
        //方法名,闭包函数
        Response::macro('caps', function ($value) {
            return Response::make(strtoupper($value));
        });
    }
}

然后这么用:

return response()->caps('foo');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值