接触laravel也有一段时间了,但是一直在用最基本的功能和方法去完成项目,一直感觉没有把这款优雅、强大的框架的特点发挥出来,因此回头重新理解框架,并尝试多用terminal命令行去解决问题,简化操作,提高工作效率。
本文并非完整的初级教程,仅是个人学习过程中觉得有必要记录的一些可以提交效率的小技巧的记录。
初级教程戳这里,本文也是受此篇博客启发。
传送门
Route and Controller 路由与控制器
- controller路由与控制器
- resource路由与控制器
- RESTful个人浅解
controller路由与控制器
从最开始接触的TP框架到Kohana框架,路由规则均是已经由框架本身规定好的,基本套路都是http://host/controller/action,但是在laravel中,所有的路由规则都可以自己定义,基本路由设置很简单:
Route::get('/', function () {
return view('welcome');
});
Route::get('/', 'WelcomeController@index');
直接这么使用并没有什么问题,我之前也的确是这么做的,但是当你的项目足够庞大,甚至因为偷懒(例如我),在不改变目录结构的情况下,不按照一个项目一个laravel框架的原则下,你的路由很可能会变成这样:
项目也没有任何问题,运行也都是正常,让我自己去维护也还ok,但是我相信要是我找一个人来接手这一堆项目,他肯定得吐血三升。
因此就需要一个能简化路由的方法,controller路由就可以做到这件事情。
Route::controller('/', 'HomeController');
对应的控制器:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class HomeController extends Controller {
/**
* 显示首页。
*
* @return Response
*/
public function getIndex()
{
return view('home');
}
/**
* 显示关于界面
*
* @return Response
*/
public function getAbout()
{
return view('about');
}
}
在这里,你就可以直接通过http://host/index或者http://host/about访问到对应的action了,这种处理方法和之前TP等那种规定规则的路由就比较相似了。
注意:5.3貌似没有了controller路由,至少文档里面没有提及,所以我还是更推荐大家使用后面所说的resource路由.
Resource路由与控制器
laravel强大的一点就是你可以通过规范(国际通用的准则),与命令行一起快速的生成可维护性很强的代码,在这里重点推荐resource路由,写法:
Route::resource('product', 'ProductController');
对应的controller文件:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
这种写法的好处就是,不光简化了路由,更是因为是完全按照了RESTful标准来建立的路由规则。
RESTful标准,可以参照阮一峰大神的博客传送门,很直白浅显的介绍了RESTful是什么。
resource路由所对应的地址可以参考:
请求方法 | 请求url | 对应的控制器方法 | 代表的意义 |
---|---|---|---|
get | product | index | 索引/列表 |
get | product/create | create | 创建(显示表单) |
post | product | store | 保存 |
get | product/{id} | show | 显示对应id的内容 |
get | product/{id}/edit | edit | 编辑(显示表单) |
put/patch | product/{id} | save | 保存(更新) |
delete | product/{id} | destroy | 删除 |
如上所示,一行语句包含了几乎所有的情况,并且完全符合标准,易于理解,对于cms这种更为适用,例如laravel开发组成员,开发的BootstrapCMS就是基于这个的基础上,并且还可以直接使用命令行创建出对应的控制器:
5.0-5.2:
php artisan make:controller ProductController
5.3:如果没有后缀,则会创建一个空的控制器
php artisan make:controller ProductController --resource
如果大家还有不明白的地方,我推荐先把官方文档通读一遍,其实文档中很多情况都解释的比较详细,另外再加上自己的不断尝试,理解会比较深刻。
最后,谢谢大家观看。