laravel入门与实战示例代码----路由与控制器

示例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 将一组路由限制为只允许登录用户访问

扫描二维码关注公众号,回复: 2298870 查看本文章
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']);
}

猜你喜欢

转载自blog.csdn.net/xielinrui123/article/details/81009106