laravel_基础_Response|redirect|cookie|view|json|jsonp|download

11 篇文章 0 订阅

1.Response

Response是继承自 Symfony\Component\HttpFoundation\Response的 Illuminate\Http\Response类的一个实例。

用法:

return (new Response($content,$status));
return response($content,$status);

1.1创建一个带header信息的Response实例:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

use App\Http\Requests;

class ResponseController extends Controller
{
    public function getIndex()
    {
        $content = 'Hello';
        $status = 200;
        $value = 'text/html;charset=utf-8';
        return (new Response($content,$status))->header('Content-Type',$value);
    }
}

然后访问xxx/response在浏览器按F12看请求头信息
如果把$status改成500看看。

1.2使用全局函数response()返回一个response实例:

    public function getIndex()
    {
        $content = 'Hello';
        $status = 200;
        $value = 'text/html;charset=utf-8';
        // return (new Response($content,$status))->header('Content-Type',$value);
        return response($content,$status)->header('Content-Type',$value);
    }

【注意】:header方法用于设置响应头信息,withCookie方法用于添加cookie,这两个方法都会返回调用它的Response自身对象,所以这两个方法都支持方法链(即多次调用header或withCookie方法);而content和status方法则用于返回当前响应的响应实体内容和响应状态码。

1.3添加cookie

用法:(上一节有讲到)

withCookie();

详细参数说明:

    public function getIndex()
    {
        $content = 'Hello';
        $status = 200;
        $value = 'text/html;charset=utf-8';
        // withCookie() 接收完整参数:cookie名、值、有效期(分钟)、作用路径(根目录)、作用域名
        return response($content,$status)->header('Content-Type',$value)
        ->withCookie('cookie01','cookie01.org',1,'/','laravel.app');
    }

【注意】:有效期不设置默认是关闭浏览器后失效。
浏览器访问xxx/response,按F12查看cookie
以上方法设置的cookie默认是加密的

不加密的cookie:
如果要取消加密,在app/Http/Middleware/EncryptCookies.php文件中将对应的cookie名添加到EncryptCookies类属性$except中即可:

<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;

class EncryptCookies extends BaseEncrypter
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        //
        'cookie01',
    ];
}

浏览器重新访问xxx/response,按F12查看cookie,发现cookie没加密,这里只是测试,实际项目中绝不这么做。

2.ResponseFactory篇(返回视图、json、下载)

response函数如果不传入参数会返回 Illuminate\Contracts\Routing\ResponseFactory契约的实现——Illuminate\Routing\ResponseFactory,该类中提供了多个方法用来生成更加丰富的响应类型,比如视图响应、JSON响应、文件下载等等。

用法:

return response()->view();
return view();
return response()->json();
return response()->download();

2.1视图响应view

返回带响应头的视图:

    public function getView()
    {
        $value = 'text/html;charset=utf-8';
        // 如果返回的视图需要手动设置HTTP响应头,需要这样写:
        return response()->view('hello',['message'=>'Hello LaravelAcademy'])
            ->header('Content-Type',$value);
    }

【注意】:需要在resources/views下新建一个视图文件hello.blade.php,其内容如下:

{{$message}}

直接返回视图view:

    public function getView()
    {
        $value = 'text/html;charset=utf-8';
        // 如果返回的视图需要手动设置HTTP响应头,需要这样写:
        return response()->view('hello',['message'=>'Hello LaravelAcademy'])
            ->header('Content-Type',$value);

        // 直接返回视图
        return view('hello',['message'=>'Hello LaravelAcademy']);
    }

2.2返回json/jsonp

返回json:

return response()->json(['name'=>'LaravelAcademy','passwd'=>'LaravelAcademy.org']);

如果返回的是JSONP响应,也很简单,只需要在json后面再调用setCallback即可:

return response()->json(['name'=>'LaravelAcademy','passwd'=>'LaravelAcademy.org'])
        ->setCallback(request()->input('callback'));

2.3文件下载download

实例:

    public function getDownload()
    {
        // download() 接收两个参数:资源完整路径包括文件名、另存的文件名
        return response()->download(base_path('public\images').'\QQ图片20160623001337.jpg','test.jpg');
    }

3.重定向redirect

重定向响应是 Illuminate\Http\RedirectResponse类的实例,我们通常使用全局帮助函数redirect来生成 RedirectResponse实例。和response类似,redirect函数如果接收参数则调用的是Illuminate\Routing\Redirector类的to方法,如果无参调用则返回的是Redirector对象实例。

用法:

redirect();
back();
redirect->route();
redirect()->action();
redirect()->with();

直接重定向到一个指定的url

return redirect('home/request');

重定向到上一个url

// 验证请求...
return back()->withInput();

重定向到路由route

return redirect()->route('request');
//重定向带参数,request_param这个路由方法的写法:/request/param/{id},这样就能接收到$id=100
return redirect()->route('request_param',100);

重定向到控制器动作

return redirect()->action('PostController@index');
// 带参数
return redirect()->action('PostController@show',[1]);

重定向带一次性session

return redirect('request')->with('status', 'Profile updated!');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值