>  기사  >  백엔드 개발  >  Laravel에서 리소스 라우팅을 다시 작성하는 방법에 대한 자세한 설명

Laravel에서 리소스 라우팅을 다시 작성하는 방법에 대한 자세한 설명

*文
*文원래의
2018-01-03 15:46:162993검색

Laravel에서 리소스 라우팅을 다시 작성하는 방법은 무엇입니까? 이 글에서는 Laravel에서 리소스 라우팅 커스텀 URL을 다시 작성하는 구현 방법을 주로 소개합니다. 그것이 모두에게 도움이 되기를 바랍니다.

머리말

이 글은 주로 Laravel에서 리소스 라우팅 사용자 정의 URL을 다시 작성하는 것과 관련된 내용을 소개하고 참고 및 학습을 위해 공유합니다. 아래에서는 할 말이 많지 않으니 자세한 소개를 살펴보겠습니다. :

재작성 이유

최근 Laravel을 사용하여 프로젝트를 개발하는 과정에서 라우팅 코드를 단순화하기 위해 Laravel의 리소스 라우팅 Route::resource('photo', 'PhotoController'); Route::resource('photo', 'PhotoController');

在默认情况下,Laravel生成的路由表如下:

动作 路径 Action 路由名称
GET /photo index photo.index
GET /photo/create create photo.create
POST /photo store photo.store
GET /photo/{photo} show photo.show
GET /photo/{photo}/edit edit photo.edit
PUT/PATCH /photo/{photo} update photo.update
DELETE /photo/{photo} destroy photo.destroy

为了满足项目需求,需将/photo/{photo}/edit 路径改为 /photo/edit/{photo}

实现步骤

查询了Laravel源码,发现此路径生成的方法在IlluminateRoutingResourceRegistrar.php类中,我们需重写此类的addResourceEdit方法即可。

重写addResourceEdit方法

创建新类 AppRoutingResourceRegistrar.php,代码如下:

namespace App\Routing;

use Illuminate\Routing\ResourceRegistrar as OriginalRegistrar;
class ResourceRegistrar extends OriginalRegistrar
{
 /**
  * Add the edit method for a resourceful route.
  *
  * @param string $name
  * @param string $base
  * @param string $controller
  * @param array $options
  * @return \Illuminate\Routing\Route
  */
 protected function addResourceEdit($name, $base, $controller, $options)
 {
  $uri = $this->getResourceUri($name).'/'.static::$verbs['edit'].'/{'.$base.'}';

  $action = $this->getResourceAction($name, $controller, 'edit', $options);

  return $this->router->get($uri, $action);
 }
}

在AppServiceProvider中注册这个类

public function boot()
 {
  //重写资源路由
  $registrar = new \App\Routing\ResourceRegistrar($this->app['router']);
  $this->app->bind('Illuminate\Routing\ResourceRegistrar', function () use ($registrar) {
   return $registrar;
  });
 }

最后使用Route::resource('photo', 'PhotoController');

기본적으로 Laravel이 생성하는 라우팅 테이블은 다음과 같습니다:

tr> tr> td> table>프로젝트 요구 사항을 충족하려면 /photo/{photo}/edit 경로를 /photo/edit/{photo}

구현 단계

로 변경해야 합니다. Laravel 소스 코드를 쿼리한 결과 이 ​​경로가 생성된 것을 발견했습니다. 메소드는 IlluminateRoutingResourceRegistrar.php 클래스에 있으며 이 클래스의 addResourceEdit 메소드를 재정의해야 합니다. addResourceEdit 메소드를 재정의하세요

다음 코드를 사용하여 AppRoutingResourceRegistrar.php라는 새 클래스를 만듭니다. rrreee

AppServiceProvider에 이 클래스를 등록하세요🎜🎜rrreee🎜마지막으로 Route::resource('photo', ' PhotoController');생성된 경로가 요구 사항을 충족합니다. 🎜🎜🎜관련 권장 사항: 🎜🎜🎜🎜🎜Laravel 최적화 분할 라우팅 파일🎜🎜🎜🎜🎜🎜laravel 쓰기 APP 인터페이스(API)🎜🎜🎜🎜🎜🎜Laravel의 대기열 사용🎜🎜🎜
Action 경로 작업 경로 이름
GET /photo 색인 photo.index
GET /photo/create create photo.create
POST /photo store photo.store td>
GET /photo/{photo} show photo.show
GET /photo/{photo}/edit 편집 photo.edit
PUT/PATCH /photo/{photo} 업데이트 photo.update
삭제 /photo/{photo} 파기 photo.destroy

위 내용은 Laravel에서 리소스 라우팅을 다시 작성하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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