示例3-1 路由的基本定义
//route/web.php
Route::get('/',function(){
return 'Hello, World!';
});
示例3-2 简单的网站
Route::get('/',function(){
return view('welcome');
});
Route::get('about',function(){
return view('about');
});
Route::get('product',function(){
return view('product');
});
Route::get('services',function(){
return view('services');
});
示例3-3 路由动词
Route::get('/', function(){}{
return 'Hello, World!';
});
Route::post('/',function(){});
Route::put('/',function(){});
Route::delete('/',function(){});
Route::any('/',function(){});
Route::match(['get','post'],'/',function(){});
示例3-4 路由调用控制器方法
Route::get('/','WelcomeController@index');
示例3-5 路由参数
Route::get('users/{id}/friends',function($id){
//
});
示例3-6 可选路由参数
Route::get('users/{id?}', function($id = 'fallbackId'){
//
});
示例3-7 通过正则表达式来定义路由
Route::get('users/{id}',function($id){
//
})->where('id', '[0-9]+');
Route::get('users/{username}',function($username){
//
})->where('username','[A-Za-z]+');
Route::get('posts/{id}/{slug}',function($id,$slug){
//
})->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+');
示例3-8 URL助手
<a href="<?php echo url('/'); ?>">
//输出<a href="http://myapp.com/">
示例3-9 定义路由名称
Route::get('members/{id}', 'MembersController@show')->name('members.show');
<a href="<?php route('members.show', ['id' => 14]); ?>">
示例3-10 定义一个路由组
Route::group([],function(){
Route::get('hello',function(){
return 'Hello';
});
Route::get('world',function(){
return 'World';
});
});
示例3-11 将一组路由限制为只允许登录用户访问
Route::group(['middleware' => 'auth'], function(){
Route::get('dashboard', function(){
return view('dashboard');
});
Route::get('account', function(){
return view('account');
});
});
示例3-12 为一组路由设置路径前缀
Route::group(['prefix' => 'api'], function(){
Route::get('/' ,function(){
//path /api
});
Route::get('users', function(){
//path /api/users
});
});
示例3-13 子域名路由
Route::group(['domain' => 'api.myapp.com'], function(){
Route::get('/',function(){
//
});
});
示例3-14 参数化的子域名路由
Route::group(['domain' => '{account}.myapp.com'],function(){
Route::get('/', function($account){
//
});
Route::get('users/{id}',function($account,$id){
//
});
});
示例3-15 路由组命名空间前缀
Route::get('/','ControllerA@index');
Route::group(['namespace' => 'API'] ,function(){
// App\Http\Controllers\API\ControllerB
Route::get('api/', 'ControllerB@index');
});
示例3-16 路由组名称前缀
Route::group(['as' => 'users.'. 'prefix' => 'users'], function(){
Route::group(['as' => 'comments.', 'prefix' => 'comments'],function(){
Route::get('{id}',function(){
//
})->name('show');
});
});
示例3-17 简单的view()用法演示
Route::get('/', function(){
return view('home');
});
示例3-18 传递变量给视图
Route::get('task', function(){
return view('tasks.index')->with('tasks', Task::all());
});
示例3-19 默认生成的控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class TaskController extends Controller{
}
示例3-20 简单的控制器例子
<?php
use App\Http\Controllers\Controller;
class TaskController extends Controller
{
public function home(){
return 'Hello, World!';
}
}
示例3-21 为简单的控制器建立路由
//Routes/web.php
<?php
Route::get('/', 'TaskController@home');
示例3-22 通用控制器方法示例
//TaskController.php
...
public function index()
{
return view('tasks.index')
->with('tasks', Task::all());
}
示例3-23 绑定基本的表单操作
//routes/web.php
Route::get('tasks/create', 'TasksController@create');
Route::post('tasks', 'TasksController@store');
示例2-24 创建的表单输入控制器方法
// TaskController.php
...
public function store(){
$task = new Task;
$task->title = Input::get('title');
$task->description = Input::get('description');
$task->save();
return redirect('tasks');
}
示例3-25 通过制定的方式实现控制器方法注入
//TasksController.php
...
public function store(\Illuminate\Http\Request $request){
$task = new Task;
$task->title = $request->input('title');
$task->description = $request->input('description');
$task->save();
return redirect('tasks');
}
示例3-26 资源控制器绑定
// routes/web.php
Route::resource('tasks', 'TasksController');
示例3-27 获取每个路由的资源
Route::get('conferences/{id}', function($id){
$conference = Conference::findOrFail($id);
});
示例3-28 使用隐式路由模型绑定
Route::get('conferences/{conference}', function(Conference $conference){
return view('conferences.show')->with('conference', $conference);
});
示例3-29 添加路由模型绑定
public function boot(Router $router){
//只允许parent的boot()方法继续运行
parent::boot($router);
//执行绑定
$router->model('event;, Conference::class);
}
示例3-30 使用显示路由模型绑定
Route::get('events/{event}', function(Conference $event){
return view('events.show')->with('event',$event);
});
示例3-31 表单方法欺骗
<form action="/tasks/5" method="POST">
<input type="hidden" name="_method" value="DELETE">
</form>
示例3-32 CSRF令牌
<form action="/tasks/5" method="POST">
<?php echo csrf_field(); ?>
<!-- 或者: -->
<input type="hidden" name="_token" value="<?php echo csrf_token();?>">
</form>
示例3-33 全局绑定CSRF的header
//在JQuery中
$.ajaxSetup({
headers:{
'X-CSRF-TOKEN':$('meta[name="csrf_token"]').attr('content')
}
});
// 在Vue中
Vue.http.interceptors.push((request,next)=>{
request.headers['X-CSRF-TOKEN']=
document.querySelector('#token').getAttribute('content');
next()
});
示例3-34 返回重定向的不同方法
//使用出重定向全局助手生成重定向的响应
Route::get('redirect-with-helper', function(){
return redirect()->to('login');
});
//使用全局助手的快捷方式
Route::get('redirect-with-helper-shortcut', function(){
return redirect('login');
});
//使用facade生成重定向响应
Route::get('redirect-with-facade', function(){
return Redirect::to('login');
});
示例3-35 redirect()->to()
Route::get('redirect', function(){
return redirect()->to('home');
//或者使用快捷方式
return redirect('home');
});
示例3-36 redirect()->route()
Route::get('redirect', function(){
return redirect()->route('conferences.index');
});
示例3-37 带有参数的 redirect()->route()
Route::get('redirect', function(){
return redirect()->route('conferences.show', ['conference' => 99]);
});
示例3-38 附带数据的重定向
Route::get('redirect-with-key-value', function(){
return redirect('dashboard')->with('error',true);
});
Route::get('redirect-with-array', function(){
return redirect('dashboard')->with(['error' => true, 'message' => 'Whoops!']);777777
});
示例3-39 表单输入重定向
Route::get('form', function(){
return view('form');
});
Route::post('form', function(){
return redirect('form')
->withInput()
->with(['error' =>true, 'message' => 'Whoops!']);
});
示例3-40 带有错误信息的重定向
Route::post('form', function(){
$validator = Validator::make($request->all(), $this->validationRules);
if ($validator->fails()){
return redirect('form')
-withErrors($validator)
->withInput();
}
});
示例3-41 403Forbidden终止
Route::post('something-you-cant-do', function (Illuminate\Http\Request){
abort(403,'you cannot do that!');
abort_unless($request->has('magicToken'),403);
abort_if($request->user()->isBanned,403);
});
示例3-42 编写一个简单的POST路由测试
//AssignmentTest.php
public function test_post_creates_new_assigment(){
$this->post('/assignments', [
'title' => 'My great assignment'
]);
$this->seeInDatabase('assignments',[
'title' => 'My great assignment'
]);
}
示例3-42 编写一个简单的GET路由测试
//AssignmentTest.php
public function test_list_page_show_assigments(){
$assignment = Assignment::create([
'title' => 'My great assignment'
]);
$this->visit('assignments')
->dee(['My great assignment']);
}