Laravel-01-请求和响应对象理解分析


在Laravel里,主要是对请求和响应作了对象化处理,因此要充分理解对象化编程的理念。php

获取请求对象

从这里开始要讲Http的请求和响应,要先对http协议进行充分的预习和了解。html

在Laravel里,主要是对请求和响应作了对象化处理,因此要充分理解对象化编程的理念。laravel

咱们的一个表单中提交上来的信息,是怎么传送到控制器里进行处理的呢?编程

先来看个路由:api

Route::post('user', 'UserController@store');


   这个路由就是用来提交表单信息的,接下来咱们来看看UserController中怎么写: 传统的写法数组

<?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Input;
class UserController extends Controller
{   
 public function store()  
  { 
   $name = Input::get('name');
    //    
  }
 }

   

  这里的Input::get('name');就至关于php 的$_GET('name');下面咱们来看用Request对象怎么写:session

<?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller
{ 
   public function store(Request $request)
   {
      $name = $request->input('name');       
       //  
    }
 }

       这里又出现了Request $request这种控制器方法依赖注入的写法,看文档就是有这个问题,好多概念不分前后,混在一块儿讲;总之你须要知道这样写,就能够获得一个$request对象。使用对象后,比起只是用$_GET('name');取得一个值,功能要强大不少,后面会有讲到;
post

Request $request 这种(Typehint)写法,其实不是输入一个参数,而是注入了一个 对象,可是若是我要加入参数怎么办:写在后面!:url

路由spa

Route::put('user/{id}', 'UserController@update');

控制器

<?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller
{
   public function update(Request $request, $id)
   {       
    //    
    }
 }


基本的请求对象操做

请求URL相关

获取发出请求的完整URL:

$url = $request->url();

获取URL相对路径:

$uri = $request->path();

判断请求是否来自某个url:

if ($request->is('admin/*'))
{  
  //
 }

判断请求的方法

$method = $request->method();
if($request->isMethod('post')) 
{   
 //
 }

获取请求值

$name = $request->input('name');

若是你不能肯定有没有这个name,你能够:

$name = $request->input('name', 'Sally');

这样就能够在name没有的状况下设置一个name及其默认值; 若是传过来的是个数组:

$input = $request->input('products.0.name');

你能够用这种方式取值,超级方便。

取所有值

$input = $request->all();

这将获得一个数组;

限制取值

$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');

把Input值放到Session里

表单提交数据,通常刷新后就没了,有时候你须要重复使用它们,通常能够放它们放到Session里:

$request->flash();

相似以前的知识,咱们能够对request的值作一些限制:

$request->flashOnly('username', 'email');
$request->flashExcept('password');

更多的应用是在重定向的时候:

 return redirect('form')->withInput();
 return redirect('form')->withInput($request->except('password'));

withInput() 就能够把request里所有的值发给Session,若是须要进行一些限制,能够这样写withInput($request->except('password'));

取回request发给session的值

$username = $request->old('username');

在视图中(这里还没讲到blade模板,先记着),能够在表单中这样写:

<input name="username" value="{{ old('username') }}"/>

这样若是用户表单填错了,再重定向返回的时候,表单就能够记住上次用户输入的数据;

文件请求

文件请求是一种特殊的请求,涉及到文件在磁盘上的操做;

获取上传的文件

$file = $request->file('photo');

这里获取到的是一个文件对象;

检查是否有某上传文件

if ($request->hasFile('photo'))
{    
  //
}

检查上传文件是否成功

if ($request->file('photo')->isValid())
{
  //
}

移动上传文件

$request->file('photo')->move($destinationPath);
$request->file('photo')->move($destinationPath, $fileName);

$destinationPath 必须是一个完整的磁盘路径,后面能够加个$fileName给文件重命名;

对于上传文件的操做还有一系列Api,请参考:Symfony\Component\HttpFoundation\File\UploadedFile


参考原文:http://laravelbase.com/collections/1/39

相关文章
相关标签/搜索