laravel笔记-控制器
来源:互联网 发布:在软件广场英文 编辑:程序博客网 时间:2024/06/03 04:16
laravel笔记-控制器
写在前面
时间可贵,善用目录↑
学习Laravel的笔记,仅仅是作为laravel文档笔记,目的是强化对文档的理解,质量不高。
什么是控制器(Controller)
将相关的 HTTP 请求封装到一个类中进行处理。通常控制器存放在 app/Http/Controllers 目录中。
继承App\Http\Controllers\Controller
控制器嘛,起一个控制调度的作用。
一个简单的控制器:
namespace App\Http\Controllers;use App\User;use App\Http\Controllers\Controller;class UserController extends Controller{ /** * 为指定用户显示详情 * * @param int $id * @return Response */ public function show($id) { return view('user.profile', ['user' => User::findOrFail($id)]); }}
怎么用?
创建
Artisan命令:
php artisan make:controller <controller-name>
当然也可以自己写~
调用
在路由文件中调用控制器~
最简单的一种方法:
//当用户访问user时,调用UserController的show方法Route::get('user/{id}', 'UserController@show');//命名空间可以省略App\Http\Controllers
和中间件的互动
给控制器分配中间件有两种方法
一是在路由中分配中间件(laravel笔记-中间件、路由中有介绍):
Route::get('profile', 'UserController@show')->middleware('auth');
二是在控制器中绑定中间件:
class UserController extends Controller{ /** * 实例化一个新的 UserController 实例 * * @return void */ public function __construct() { //全局 $this->middleware('auth'); //指定方法 $this->middleware('log')->only('index'); //排除方法 $this->middleware('subscribed')->except('store'); }}
注:你可以将中间件分配给多个控制器动作,不过,这意味着你的控制器会变得越来越臃肿,这种情况下,需要考虑将控制器分割成更多、更小的控制器。
特例?
单动作控制器
就是只有一个方法的控制器,laravel给出了方便的处理方式。
在控制器中定义__invoke方法
namespace App\Http\Controllers;use App\User;use App\Http\Controllers\Controller;class ShowProfile extends Controller{ /** * Show the profile for the given user. * * @param int $id * @return Response */ public function __invoke($id) { return view('user.profile', ['user' => User::findOrFail($id)]); }}
这样我们就可以在route文件里这么搞:
Route::get('user/{id}', 'ShowProfile');
相对简单一点。
资源控制器
我理解是专门做资源处理的控制器。
例如一个专门做图片储存的控制器:
php artisan make:controller PhotoController --resource
生成|的控制器会自动创建如下方法:
然后他有专门的资源路由:
Route::resource('photos', 'PhotoController');//也可以指定一部分方法Route::resource('photo', 'PhotoController', ['only' => ['index', 'show']]);//当然也可以排除Route::resource('photo', 'PhotoController', ['except' => ['create', 'store', 'update', 'destroy']]);//或者说我们可以改一改名字Route::resource('photo', 'PhotoController', ['names' => ['create' => 'photo.build']]);//当然也可以加点参数Route::resource('user', 'PhotoController', ['parameters' => [ 'user' => 'admin_user']]);
补充资源控制器
大多数时候对于一个请求只一个资源控制器是满足不了需求的,这样就可以添加额外的控制器:
//补充控制器路由务必在资源路由之前定义,防止被覆盖。Route::get('photos/popular', 'PhotoController@method');Route::resource('photos', 'PhotoController');
隐式控制器
隐式控制器允许你定义一个路由处理控制器中的每一个动作。
控制器的方法名应该是类似 GET或POST HTTP动词开头。如果以 get 开始,它只会处理 get 请求,如果它使用 post 开駋那么将处理post请求。在HTTP动词后,可以方法使用任何名称,但它应遵循 URI 的格式。
这样的:
route文件:
//绑定控制器Route::controller('my', 'MyController');
MyController.php
namespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Requests;use App\Http\Controllers\Controller;class MyController extends Controller { /** * Responds to requests to GET /test */ public function getIndex(){ echo 'index method'; } /** * Responds to requests to GET /test/show/1 */ public function getShow($id){ echo 'show method'; } /** * Responds to requests to GET /test/admin-profile */ public function getAdminProfile(){ echo 'admin profile method'; } /** * Responds to requests to POST /test/profile */ public function postProfile(){ echo 'profile method'; }}
关于参数
构造函数注入(依赖注入)
就是说在创建实例的时候就注入依赖,比如说:创建时注入了App\Repositories\UserRepository
方法注入
在方法中注入实例Illuminate\Http\Request
路由参数
Route::put('user/{id}', 'UserController@store');
namespace App\Http\Controllers;use Illuminate\Routing\Controller;use Illuminate\Http\Request;use App\Repositories\UserRepository;class UserController extends Controller{ //依赖注入 /** * The user repository instance. */ protected $users; /** * 创建新的控制器实例 * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { $this->users = $users; ...... } //方法注入 /** * 存储新用户 * * @param Request $request * @return Response */ public function store(Request $request ,$id) { $name = $request->input('name'); ...... }}
路由缓存
使用路由缓存将会极大减少注册所有应用路由所花费的时间开销。
# 每次修改路由都要重新生成# 生成缓存php artisan route:cache#清除缓存php artisan route:clear
注意:路由缓存不会作用于基于闭包的路由。要使用路由缓存,必须将闭包路由转化为控制器路由。
- laravel笔记-控制器
- laravel路由、中间件、控制器等简单笔记
- Laravel 5.1.4 + Bootstrap 3.3.5 笔记四:Laravel 控制器
- Laravel 控制器
- laravel控制器
- laravel 学习笔记——路由(路由与控制器)
- laravel 学习笔记——路由(路由与控制器)
- Laravel 学习笔记——路由(路由与控制器)
- 6. laravel 控制器
- Laravel控制器简单总结
- Laravel控制器详解
- laravel 三 控制器
- laravel生成控制器
- laravel自定义控制器文件
- Laravel的资源控制器
- Laravel控制器详解
- Laravel控制器和视图
- ### laravel学习--控制器
- jQuery.bind事件
- Nsstring定义时用copy还是用strong
- GDB堆栈跟踪
- Android Camera从App层到framework层到HAL层的初始化过程
- MySQL可以用localhost连接,使用IP地址无法连接问题
- laravel笔记-控制器
- 本周全球游戏安全资讯精选丨阿里云河南
- 【教程】Matlab之正版静默安装教程(Linux16.04 无图形化界面)
- RANSAC算法,random sample consensus随机采样一致性算法
- 函数&作用域&闭包
- Android Gradle manifestPlaceholders 占位符详解
- Android 使用Rtmp音视频推流(002)
- Spring 4.x/Spring Boot推荐配置方式——Java配置
- 了解SQL