在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 = $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');
表单提交数据,通常刷新后就没了,有时候你须要重复使用它们,通常能够放它们放到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'));
$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