欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel响应和视图 以及 传参 传值 传递参数 控制器让 blade 模板共享数据 有大用

shiping1 的头像
基础响应 

    //直接响应字符串 
    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');   // 在控制器中 就可以直接使用
//或者 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 

来自 
http://my.oschina.net/u/2444569/blog/500837
普通分类: