>  기사  >  PHP 프레임워크  >  HTTP 라우팅 소개, Laravel5.2에서 컨트롤러 및 리소스 라우팅 생성(코드 포함)

HTTP 라우팅 소개, Laravel5.2에서 컨트롤러 및 리소스 라우팅 생성(코드 포함)

不言
不言앞으로
2019-01-19 09:47:403383검색

이 글은 Laravel 5.2(코드 포함)에서 HTTP 라우팅, 컨트롤러 생성 및 리소스 라우팅에 대한 소개를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. HTTP 라우팅

모든 경로는 AppProvidersRouteServiceProvider 클래스에 의해 로드된 app/Http/routes.php 파일에 정의됩니다.

1. 기본 라우팅

간단한 Laravel 라우팅은 URI와 클로저만 허용합니다

Route::get('foo', function () {
    return 'Hello, Laravel!';
});

일반적인 HTTP 요청의 경우 Laravel에는 다음과 같은 경로가 있습니다

Route::get($uri, $callback); //响应 get 请求
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
 
Route::match(['get', 'post'], $uri, $callback); //响应 get, post 请求
Route::any('foo', $callback); //响应所有请求

그 중 $callback은 클로저가 될 수 있습니다. 또한 컨트롤러 방법이 될 수 있습니다. 실제로 개발 중에는 컨트롤러 메서드가 사용되는 상황이 많이 있습니다.

2. 라우팅 매개변수

//单个路由参数
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
//多个路由参数
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});
//单个路由参数(可选)
Route::get('user/{id?}', function ($id = 1) {
    return 'User '.$id;
});
//多个路由参数(可选)
Route::get('posts/{post}/comments/{comment?}', function ($postId, $commentId = 1) {
    //
});
//注意:多个参数时,只可以对最后一个参数设置可选,其他位置设置可选会解析错误
 
// 正则约束单个参数
Route::get('user/{name?}', function ($name = 'Jone') {
    return $name;
})->where('name', '\w+');  //约束参数为单词字符(数字、字母、下划线)
 
// 正则约束多个参数
Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

2. 컨트롤러 생성

Artisan 명령을 사용하여 php artisan make:controller UserController

이제 컨트롤러 디렉토리 app/Http/Controllers 컨트롤러 파일에 UserController.php가 생성됩니다. .

3. 고급 라우팅

1. 명명된 경로

//命名闭包路由
Route:get('user', array('as' => 'alial', function(){});
//或 name 方法链
Route:get('user', function(){})->name('alias');
 
//命名控制器方法路由
Route:get('user', array('uses' => 'Admin\IndexController@index', 'as' => 'alias'));
//或 name 方法链
Route:get('user', 'Admin\IndexController@index')->name('alias'));

2. 경로 그룹화

2.1 경로 접두사 및 네임스페이스

예를 들어 컨트롤러 메서드를 가리키는 두 가지 경로가 있습니다.

Route::get('admin/login', 'Admin\IndexController@login');
Route::get('admin/index', 'Admin\IndexController@index');

말하자면,

매개변수 1: admin/login은 이 URI가 웹사이트의 루트 디렉터리에 있는 admin/login 리소스를 요청하고 있음을 의미합니다. 전체 주소는 http://domain name/admin/login입니다(Apache의 라우팅 재라우팅은 다음과 같습니다). 여기에서 "index.php"를 숨기고 작성하면 이 요청은 두 번째 매개변수에 지정된 컨트롤러 메서드에 매핑됩니다. 웹사이트 루트 디렉터리는 항목 파일이 위치한 디렉터리이며, 이는 Laravel의 공용 디렉터리이므로 서버를 구성할 때 여기를 가리키는 것이 가장 좋습니다.

매개변수 2: AdminIndexController@login은 이 컨트롤러 메서드가 AppHttpControllers 네임스페이스에 있고 연결이 AppHttpControllersAdminIndexController 컨트롤러의 로그인 메서드임을 의미합니다.

분명히 두 경로의 URI와 컨트롤러 메서드는 동일한 부분을 갖습니다. 그런 다음 경로 그룹화를 활성화하면 공통 부분을 추출할 수 있습니다.

// 第一个数组参数中,prefix 键定义 URI 的公共部分,namespace 键定义方法名(命名空间语法)的公共部分
Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function(){
    Route::get('login', 'IndexController@login');
    Route::get('index', 'IndexController@index');
});

2.2 리소스 라우팅

리소스 라우팅은 리소스 제어에 매핑됩니다. Laravel 리소스 컨트롤러에는 리소스를 추가, 삭제, 수정 및 확인하는 7가지 메소드와 7가지 경로가 내장되어 있습니다.

먼저 리소스 컨트롤러 ArticleController를 생성합니다

php artisan make:controller Admin/ArticleController  --resource

이렇게 하면 app/Http/Controllers/Admin/ArticleController.php 파일에 리소스 컨트롤러가 생성됩니다(Admin 폴더가 없으면 자동으로 생성됩니다). 7개가 내장되어 있습니다. 방법은 다음과 같습니다.

<?php
 
namespace App\Http\Controllers\Admin;
 
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
 
class LinksController extends Controller
{
    /**
     * 显示一个资源的列表
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }
 
    /**
     * 显示一个表单来创建一个新的资源
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }
 
    /**
     * 保存最新创建的资源
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }
 
    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }
 
    /**
     * 显示一个表单来编辑指定的资源
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }
 
    /**
     * 更新指定的资源
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }
 
    /**
     * 删除指定的资源
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

그런 다음 리소스 경로를 정의합니다. 여기서는 여전히 라우팅 그룹 아래에 정의하기로 선택했습니다. 하나만 정의하면 됩니다.

Route::group(array(&#39;prefix&#39; => &#39;admin&#39;, &#39;namespace&#39; => &#39;Admin&#39;), function(){
    Route::get(&#39;login&#39;, &#39;IndexController@login&#39;);
    Route::get(&#39;index&#39;, &#39;IndexController@index&#39;);
    // 资源路由
    Route::resource(&#39;article&#39;, &#39;ArticleController&#39;);
});

마지막으로 경로를 확인하세요. 리소스 컨트롤러와 리소스 라우팅을 사용하면 위 7가지 메서드에 대한 HTTP 요청 메서드를 살펴볼 수 있습니다.

Artisan 명령 php artisan Route:list를 사용하여 요청 메소드, URI, 컨트롤러 메소드 및 미들웨어를 포함한 모든 현재 경로를 나열하십시오.

위 내용은 HTTP 라우팅 소개, Laravel5.2에서 컨트롤러 및 리소스 라우팅 생성(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제