>백엔드 개발 >PHP 튜토리얼 >Yii2 프레임워크를 사용하여 완전한 블로그 시스템 구축에 대한 리소스 공유

Yii2 프레임워크를 사용하여 완전한 블로그 시스템 구축에 대한 리소스 공유

黄舟
黄舟원래의
2017-09-01 09:49:082512검색

Yii는 신속한 PHP 개발을 위한 모범 사례 중 하나입니다. 풍부한 확장 리소스와 신속한 개발 아이디어가 기업에서 점점 더 선호되고 있으며 해당 애플리케이션이 점점 더 널리 보급되고 있습니다. 본 강좌에서는 블로그 시스템을 예로 들어 yii2.0을 실제 개발에 활용하는 방법을 설명하고 yii2.0의 실제 적용 방법을 학습합니다. 콘텐츠는 기본 구성, 블로그 프런트엔드, 블로그 백엔드의 세 부분으로 나뉩니다.

Yii2 프레임워크를 사용하여 완전한 블로그 시스템 구축에 대한 리소스 공유

영상 재생 주소: //m.sbmmt.com/course/266.html

선생님의 강의 스타일:

선생님의 강의는 간단하고 깊이 있고 명확합니다. 논리적 사고력을 사용하여 학생들의 관심을 끌고 이성을 사용하여 교실 교육 과정을 제어합니다. 선생님의 강의를 들으면서 학생들은 지식을 배울 뿐만 아니라 사고력도 훈련받았고, 선생님의 엄격한 학문적 태도에 영향을 받고 영향을 받았습니다

이 영상에서 더 어려운 점은 Yii의 프레임워크 라우팅 구성입니다. 프레임워크 블로그 시스템:

기본 라우팅

대부분의 애플리케이션 경로는 app/routes.PHP 파일에 정의됩니다. Laravel에서 가장 간단한 경로는 URI와 클로저 호출로 구성됩니다.

기본 GET 경로

코드는 다음과 같습니다.

Route::get('/', function(){return 'Hello World';});

기본 POST 경로

코드는 다음과 같습니다.

Route::post('foo/bar', function()
{
return 'Hello World';
});


모든 HTTP 메소드에 응답하는 경로를 등록합니다

코드는 다음과 같습니다. :

Route::any('foo', function()
{
   return 'Hello World';
});


경로가 HTTPS 액세스를 통과하도록 강제하기

코드는 다음과 같습니다.

Route::get('foo', array('https', function()
{
    return 'Must be over HTTPS';
}));


라우팅을 기반으로 URL을 생성해야 하는 경우가 많으며 URL::to 메서드를 사용할 수 있습니다.

코드

$url = URL::to('foo');

라우트 매개변수

코드는 다음과 같습니다.

Route::get('user/{id}', function($id)
{
return 'User '.$id;
});


선택적 라우팅 매개변수

코드는 다음과 같습니다.

Route::get('user/{name?}', function($name = null)
{
return $name;
});


기본값이 포함된 선택적 라우팅 매개변수

코드는 다음과 같습니다.

Route::get('user/{name?}', function($name = 'John')
{
return $name;
});


정규식 제약 조건을 사용한 라우팅

코드는 다음과 같습니다.

Route::get('user/{name}', function($name)
{
//
})
->where('name', '[A-Za-z]+');
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');

Route Filters

  경로 필터는 지정된 경로에 대한 액세스를 제한하는 간단한 방법을 제공하며 이는 생성해야 할 때 매우 유용합니다. 인증이 필요한 사이트 영역. Laravel 프레임워크에는 auth 필터, auth.basic 필터, 게스트 필터 및 csrf 필터와 같은 일부 라우팅 필터가 포함되어 있습니다. app/filters.php 파일에 저장됩니다.

라우팅 필터 정의

코드는 다음과 같습니다.

Route::filter('old', function()
{
if (Input::get(&#39;age&#39;) < 200)
{
return Redirect::to(&#39;home&#39;);
}
});


라우팅 필터에서 응답이 반환되면 이 응답은 이 요청에 대한 응답으로 간주되며 라우팅이 실행되지 않습니다. 이 라우팅에 대한 정보 after 필터도 취소됩니다.

 경로에 대한 경로 필터 지정

코드는 다음과 같습니다.

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;old&#39;, function()
{
return &#39;You are over 200 years old!&#39;;
}));


경로에 대한 여러 경로 필터 지정

코드는 다음과 같습니다.

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;auth|old&#39;, function()
{
return &#39;You are authenticated and over 200 years old!&#39;;
}));


경로 필터 매개변수 지정

코드

Route::filter(&#39;age&#39;, function($route, $request, $value)
{
//
});
Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;age:200&#39;, function()
{
return &#39;Hello World&#39;;
}));


경로 필터가 세 번째 매개변수로 $response:

응답을 받으면 코드는 다음과 같습니다.

Route::filter(&#39;log&#39;, function($route, $request, $response, $value)
{
//
});


기본 경로 필터 모드

에 대한 필터를 지정할 수 있습니다. URI를 기반으로 하는 경로 집합입니다.

코드는 다음과 같습니다.

Route::filter(&#39;admin&#39;, function()
{
//
});
Route::when(&#39;admin/*&#39;, &#39;admin&#39;);


위 예시에서는 admin/으로 시작하는 모든 경로에 admin 필터가 적용됩니다. 별표는 와일드카드 문자 역할을 하며 모든 문자 조합과 일치합니다.

HTTP 메소드를 지정하여 패턴 필터를 제한할 수도 있습니다.

코드는 다음과 같습니다.

Route::when(&#39;admin/*&#39;, &#39;admin&#39;, array(&#39;post&#39;));

Filter 클래스

고급 필터의 경우 클로저 함수 대신 클래스를 사용할 수 있습니다. 필터 클래스는 애플리케이션 외부에 있는 IoC 컨테이너이므로 필터에 종속성 주입을 사용하여 테스트하기가 더 쉽습니다.

필터 클래스 정의

코드는 다음과 같습니다.

class FooFilter {
public function filter()
{
// Filter logic...
}
}


클래스 기반 필터 등록

코드는 다음과 같습니다.

Route::filter(&#39;foo&#39;, &#39;FooFilter&#39;);

이름이 지정된 경로

이름이 지정된 경로는 점프를 생성할 때 지정하기가 더 쉽습니다. 또는 URL 라우팅. 다음과 같이 경로 이름을 지정할 수 있습니다.

코드는 다음과 같습니다.

Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, function()
{
//
}));

컨트롤러 메서드에 경로 이름을 지정할 수도 있습니다.

코드는 다음과 같습니다.

Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, &#39;uses&#39; => &#39;UserController@showProfile&#39;));

이제 URL 또는 점프를 생성하는 중 경로 이름 사용:

코드는 다음과 같습니다.

$url = URL::route(&#39;profile&#39;);
$redirect = Redirect::route(&#39;profile&#39;);

currentRouteName 메서드를 사용하여 경로 이름을 가져올 수 있습니다.

코드는 다음과 같습니다.

$name = Route::currentRouteName();

Route group

때로는 경로 그룹에 필터를 적용하고 싶을 수도 있습니다. 각 경로에 대해 필터를 지정할 필요가 없으며 경로 그룹을 사용할 수 있습니다:

코드는 다음과 같습니다:

Route::group(array(&#39;before&#39; => &#39;auth&#39;), function()
{
Route::get(&#39;/&#39;, function()
{
// Has Auth Filter
});
Route::get(&#39;user/profile&#39;, function()
{
// Has Auth Filter
});
});

하위 도메인 라우팅

Laravel 라우팅은 와일드카드 하위 도메인을 처리하고 도메인 이름에서 와일드카드 매개변수를 가져올 수도 있습니다.

하위 도메인 라우팅 등록

코드는 다음과 같습니다.

Route::group(array(&#39;domain&#39; => &#39;{account}.myapp.com&#39;), function()
{
Route::get(&#39;user/{id}&#39;, function($account, $id)
{
//
});
});

Route prefix

경로 그룹은 속성 배열의 prefix 옵션을 사용하여 라우팅 그룹에 접두사를 추가할 수 있습니다.

접두사를 라우팅 그룹에 추가합니다. 라우팅 그룹

코드는 다음과 같습니다.

Route::group(array(&#39;prefix&#39; => &#39;admin&#39;), function()
{
Route::get(&#39;user&#39;, function()
{
//
});
});

라우팅 모델 바인딩

  模型绑定提供了一个简单的方法向路由中注入模型。比如,不仅注入一个用户的 ID,您可以根据指定的 ID 注入整个用户模型实例。首先使用 Route::model 方法指定所需要的模型:

为模型绑定一个变量

 代码如下:

Route::model(&#39;user&#39;, &#39;User&#39;);


然后, 定义一个包含 {user} 参数的路由:

 代码如下:

Route::get(&#39;profile/{user}&#39;, function(User $user)
{
//
});

  因为我们已经绑定 {user} 参数到 User 模型,一个 User 实例将被注入到路由中。因此,比如一个 profile/1 的请求将注入一个 ID 为 1 的 User 实例。

  注意: 如果在数据库中没有找到这个模型实例,将引发404错误。

  如果您希望指定您自己定义的没有找到的行为,您可以为 model 方法传递一个闭包作为第三个参数:

代码如下:

Route::model(&#39;user&#39;, &#39;User&#39;, function()
{
throw new NotFoundException;
});


  有时您希望使用自己的方法处理路由参数,可以使用 Route::bind 方法:

代码如下:

Route::bind(&#39;user&#39;, function($value, $route)
{
return User::where(&#39;name&#39;, $value)->first();
});


引发404错误

  有两种方法在路由中手动触发一个404错误。首先,您可以使用 App::abort 方法:

代码如下:

App::abort(404);

其次,您可以抛出一个 Symfony\Component\HttpKernel\Exception\NotFoundHttpException 的实例。

更多关于处理404异常和为这些错误使用使用自定义响应的信息可以在 错误 章节中找到。

路由至控制器

Laravel 不仅允许您路由至闭包,也可以路由至控制器类,甚至允许创建 资源控制器.

위 내용은 Yii2 프레임워크를 사용하여 완전한 블로그 시스템 구축에 대한 리소스 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.