Laravel响应和视图
程序员文章站
2022-05-02 14:07:54
...
基础响应
//直接响应字符串
Route::get('example/test20', function(){
return 'hello world';
});
//定制HTTP响应
Route::get('example/test21', function(){
return Response::make('内容不存在', 404);
});
//响应视图
Route::get('example/test22', function(){
return Response::view('test22');
});
//给响应添加cookie
Route::get('example/test23', function(){
return Response::view('test22')->withCookie(Cookie::make('key', 'this is value'));
响应重定向
//响应重定向
Route::get('example/test24', function(){
return Redirect::to('example/test21')->with('username', 'xiaoming');
});
//带上数据的重定向
Route::get('example/test25', function(){
//with 方法将数据写到了Session中,通过Session::get 方法即可获取该数据。
return Redirect::to('example/test21')->with('username', 'xiaoming');
});
//重定向至命名路由
return Redirect::route('login');
//重定向值带有命名参数的命名路由
return Redirect::route('profile', array('user' => 1));
//重定向至指定的控制器方法
return Redirect::action('HomeController@index');
//重定向至指定的控制器方法,并可带上参数
return Redirect::action('UserController@profile', array('user' => 1));
响应视图
//响应视图并传递参数
Route::get('example/test30', function(){
//第一种方式
return View::make('test30', array('name' => 'xiaoming'));
//第二种方式
//return View::make('test30')->with('name', 'xiaoming2');
//第三种方式
//return View::make('test30')->withName('xiaoming3');
//第四种方式,注:在所有视图*享同一数据
//View::share('name', 'Steve');
});
//在视图中传入子视图
Route::get('example/test31', function(){
$data = array('name' => 'john');
//子视图放在app/views/child/child_view.php, 你也可以向其传递变量
return View::make('test30')->with($data)->nest('child', 'child.child_view', $data);
});
视图组件或视图合成器
如果你希望视图被创建时,就绑上指定数据,可以定义视图组件:
View::composer('profile', function($view)
{
$view->with('count', User::count());
});
给视图组件添加多视图:
View::composer(array('profile','dashboard'), function($view)
{
$view->with('count', User::count());
});
如果你使用基于类的视图组件:
View::composer('profile', 'ProfileComposer');
视图组件类这样创建:
class ProfileComposer {
public function compose($view)
{
$view->with('count', User::count());
}
}
特殊响应
//创建JSON响应
return Response::json(array('name' => 'Steve', 'state' => 'CA'));
//创建JSONP响应
return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));
//文件下载响应
return Response::download($pathToFile);
return Response::download($pathToFile, $name, $headers);
注意:管理文件下载的类库Symfony HttpFoundation要求文件名是ASCII编码的。
响应宏,使用Response::macro自定义响应
Response::macro('caps', function($value)
{
return Response::make(strtoupper($value));
});
macro 方法接受两个参数,一个指定宏名称和一个闭包。当通过 Response 类调用该名称的宏时,闭包就会被执行:
return Response::caps('foo');
你可以在 app/start 目录里的文件中定义宏。或者,你也可以通过一个单独的文件组织你的宏,并将该文件包含至某个 start 文件中。
转载于http://www.phpddt.com/php/laravel-response.html
//直接响应字符串
Route::get('example/test20', function(){
return 'hello world';
});
//定制HTTP响应
Route::get('example/test21', function(){
return Response::make('内容不存在', 404);
});
//响应视图
Route::get('example/test22', function(){
return Response::view('test22');
});
//给响应添加cookie
Route::get('example/test23', function(){
return Response::view('test22')->withCookie(Cookie::make('key', 'this is value'));
响应重定向
//响应重定向
Route::get('example/test24', function(){
return Redirect::to('example/test21')->with('username', 'xiaoming');
});
//带上数据的重定向
Route::get('example/test25', function(){
//with 方法将数据写到了Session中,通过Session::get 方法即可获取该数据。
return Redirect::to('example/test21')->with('username', 'xiaoming');
});
//重定向至命名路由
return Redirect::route('login');
//重定向值带有命名参数的命名路由
return Redirect::route('profile', array('user' => 1));
//重定向至指定的控制器方法
return Redirect::action('HomeController@index');
//重定向至指定的控制器方法,并可带上参数
return Redirect::action('UserController@profile', array('user' => 1));
响应视图
//响应视图并传递参数
Route::get('example/test30', function(){
//第一种方式
return View::make('test30', array('name' => 'xiaoming'));
//第二种方式
//return View::make('test30')->with('name', 'xiaoming2');
//第三种方式
//return View::make('test30')->withName('xiaoming3');
//第四种方式,注:在所有视图*享同一数据
//View::share('name', 'Steve');
});
//在视图中传入子视图
Route::get('example/test31', function(){
$data = array('name' => 'john');
//子视图放在app/views/child/child_view.php, 你也可以向其传递变量
return View::make('test30')->with($data)->nest('child', 'child.child_view', $data);
});
视图组件或视图合成器
如果你希望视图被创建时,就绑上指定数据,可以定义视图组件:
View::composer('profile', function($view)
{
$view->with('count', User::count());
});
给视图组件添加多视图:
View::composer(array('profile','dashboard'), function($view)
{
$view->with('count', User::count());
});
如果你使用基于类的视图组件:
View::composer('profile', 'ProfileComposer');
视图组件类这样创建:
class ProfileComposer {
public function compose($view)
{
$view->with('count', User::count());
}
}
特殊响应
//创建JSON响应
return Response::json(array('name' => 'Steve', 'state' => 'CA'));
//创建JSONP响应
return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));
//文件下载响应
return Response::download($pathToFile);
return Response::download($pathToFile, $name, $headers);
注意:管理文件下载的类库Symfony HttpFoundation要求文件名是ASCII编码的。
响应宏,使用Response::macro自定义响应
Response::macro('caps', function($value)
{
return Response::make(strtoupper($value));
});
macro 方法接受两个参数,一个指定宏名称和一个闭包。当通过 Response 类调用该名称的宏时,闭包就会被执行:
return Response::caps('foo');
你可以在 app/start 目录里的文件中定义宏。或者,你也可以通过一个单独的文件组织你的宏,并将该文件包含至某个 start 文件中。
转载于http://www.phpddt.com/php/laravel-response.html
推荐阅读