찾다
백엔드 개발PHP 튜토리얼사용자 동적 모듈 개발을 구현하는 Laravel의 예 공유

사용자 동적 모듈 개발을 구현하는 Laravel의 예 공유

Sep 23, 2017 am 09:33 AM
laravel동적기준 치수

이 글은 주로 Laravel을 기반으로 한 사용자 동적 모듈 개발에 대한 관련 정보를 소개하며, 샘플 코드를 통해 이를 매우 자세하게 소개합니다. 학습이나 작업이 필요한 모든 사람이 따라할 수 있는 학습 가치가 있습니다. 아래에 오셔서 저와 함께 배워보세요.

머리말

거의 모든 커뮤니티 애플리케이션에 사용자 업데이트 섹션이 있다는 사실은 모두가 알고 있을 것입니다. 사용자는 친구 업데이트를 통해 더 흥미로운 콘텐츠를 얻을 수 있으므로 커뮤니티 활동과 사용자 충성도가 높아집니다. 구현은 주로 콘텐츠의 다양성에 반영되는 일반 콘텐츠 게시보다 상대적으로 더 복잡합니다.

이 문제를 해결하려면 이러한 다양한 유형의 콘텐츠를 추상화하고, 공통점을 추출하고, 동일한 구조를 사용하여 처리해야 하므로 개발이 훨씬 간단해집니다.

개념 추상

사용자 역학은 이름에서 알 수 있듯이 역학의 생성은 일련의 이벤트에 대한 역사적 기록이므로 먼저 "이벤트"라는 용어와 그것이 갖는 속성에 주의를 기울이십시오.

  • 커뮤니티를 기반으로 한 트리거 거의 모든 이벤트는 사용자에 의해 트리거됩니다.

  • 이벤트 본문, "xxx가 기사를 게시했습니다"의 "기사"와 같은 이벤트의 주요 정보입니다.

  • 이벤트 속성, 이벤트 주제에 따라 이벤트 유형과 같은 다양한 추가 정보가 필요합니다.

  • 발생 시간, 이벤트가 발생한 시간을 기록합니다. 물론 우리 데이터베이스는 일반적으로 모든 데이터가 생성되는 시간을 기록합니다.

우리는 구현하기 더 쉬운 4가지 기본 속성만 있는 구조로 사용자 역학을 추상화합니다.


- description    事件描述
- causer_id 或者 user_id 事件触发者
- subject_id    主体 ID
- subject_type   主体类型
- properties    事件附加属性
- created_at    事件产生时间

주요 부분은 Laravel의 다형성 관계인 모프 관계입니다.

표시 방법

동적 디스플레이 요구 사항에는 일반적으로 다음이 포함됩니다.

  • 내 친구의 역학

  • 누군가의 역학, 일반적으로 개인 센터

  • 모든 역학, 예를 들어 모두 Laravel China 홈페이지의 역학

  • 동적 검색은 상대적으로 드뭅니다.

저는 현재 사용자 역학도 포함하는 EasyWeChat 웹사이트의 새 버전을 개발 중입니다. 예:


xxx 发布了讨论 《请问大家怎么使用 xxx》
xxx 评论了 xxx 的话题 《请问大家怎么使用 xxx》
xxx 回复了 xxx 的评论 “我是按照文档上 ...”
xxx 购买了 《微信开发:自定义菜单的使用》
xxx 关注了 xxx
...

기본적으로 모든 종류의 역학 작성 방법이 다르기 때문에 "팔로우", "게시", "답장", "구매"와 같은 "이벤트 유형"도 기록해야 합니다.

그런 다음 블레이드 또는 다른 템플릿 엔진을 사용할 때 이러한 스타일을 렌더링하기 위해 다른 템플릿을 적용하도록 사례 작성을 전환할 수 있습니다.

우리는 이전에 데이터 저장 및 표시의 설계에 대해 논의한 다음 이를 구현하는 방법에 대해 더 자세히 설명했습니다. 결국 위의 구현 방법은 명확하게 설명되어 있습니다. 오늘은 spatie/laravel-activitylog를 사용하여 다음을 달성하는 것이 좋습니다.

설치는 항상 간단했습니다.

@switch($activity->properties['event'] ?? '')
 @case('discussion.created')
  ...
  @break
 @case('comment.created')
  ...
  @break
@endswitch

Recorddynamics

$ composer install spatie/laravel-activitylog -vvv

물론 이런 종류입니다. 기록은 무의미하고 거의 쓸모없는 정보이므로 일반적인 사용법은 다음과 같습니다:

activity()->log('Look, I logged something');

메서드 소개:

performedOn($model) 이벤트 본문을 설정하고, Eloquent Model 인스턴스입니다

causedBy($user) 이벤트 트리거 설정, 사용자 인스턴스

  • withProperties($properties) 위의 개념

    performedOn($model) 设置事件主体,也就是 Eloquent Model 实例

  • causedBy($user) 设置事件触发者, User 实例

  • withProperties($properties) 上面我们概念里的事件属性

  • withProperty($key, $value) 事件属性的单个用法

  • log($description)

  • withProperty($key, $value) 이벤트 속성의 단일 사용

log($description) 이벤트 설명

예를 들어 , 사용자가 게시한 항목을 기록하고 싶습니다. 토론:


activity()
 ->performedOn($anEloquentModel)
 ->causedBy($user)
 ->withProperties(['customProperty' => 'customValue'])
 ->log('Look, I logged something');
 
$lastLoggedActivity = Activity::all()->last();

$lastLoggedActivity->subject; //returns an instance of an eloquent model
$lastLoggedActivity->causer; //returns an instance of your user model
$lastLoggedActivity->getExtraProperty('customProperty'); //returns 'customValue'
$lastLoggedActivity->description; //returns 'Look, I logged something'

또는 사용자가 등록할 때 업데이트를 기록하고 싶습니다.

$discussion = App\Discussion::create([...]);

activity()->on($discussion)
->withProperty('event', 'discussion.created')
->log('发表了话题');
트리거를 설정하지 않았음을 알 수 있습니다. 트리거를 설정하지 않으면 이 모듈은 현재 로그인된 사용자로 기본 설정됩니다.

동역학 표시


동역학 표시는 조건에 따라 데이터베이스에서 꺼내는 것입니다. 여기서는 패키지에서 제공하는 모델 클래스를 사용합니다: SpatieActivitylogModelsActivity

use SpatieActivitylogModelsActivity;

activity()->on($user)
->withProperty('event', 'user.created')
->log('加入 EasyWeChat');
그럼 그냥 트래버스하세요. 디스플레이.

몇 가지 경험과 기술

역학을 기록하기 위한 특별한 동적 관찰자 클래스를 설정하세요


// 全部动态
$activities = Activity::all();
// 用户 ID 为 2 的动态 
$activities = Activity::causedBy(User::find(2))->paginate(15);
// 以文章 ID 为 13 为主体的动态
$activities = Activity::forSubject(Post::find(13))->paginate(15);

코드는 다음과 같습니다.


$ ./artisan make:listener UserActivitySubscriber

이 구독 클래스를 등록하러 갑니다.🎜 🎜AppProvidersEventServicePro vider에서 $subscribe에 이 구독 클래스를 등록하세요. 🎜🎜🎜🎜
/**
 * @var array
 */
protected $subscribe = [
 \App\Listeners\UserActivitySubscriber::class,
];

上面我们利用了 Eloquent 模型事件来监听模型的变化,当各种模型事件创建的时候我们调用对应的方法来记录动态,所以实现起来非常的方便。

在事件属性里记录关键信息

看到上面记录动态的时候你可能会问,只存储了 ID,这种多态关联,查询的时候会压力很大,比如,我们要将动态显示为:

安小超 发布了文章 《自定义菜单的使用》

我们如果只是存储了文章的 id 与类型,我们还需要查询一次文章表,才能得到标题用于显示,这样一个动态列表的话,可能会几十条 SQL 了,的确是这样的,我的解决方案是这样的:

其实我们的用户动态是不要求 100% 精准的,所以,我如果在记录时把文章的标题一起存下来是不是就不用再查表了?其实就是,我们在动态列表需要展示的关键信息,比如标题这些一起用 withProperties 存起来,这样就一条 SQL 解决了动态列表问题。

这样的做法也有弊端,比如文章改了标题的时候,这里就不同步了,当然你也可以在文章修改时来改这个属性,不过我个人认为没有多大必要。毕竟动态就是记录了当时的情况,后来改标题了并没有什么问题。

OK,用户动态模块的开发就分享到这里,如果你有更高级的实现欢迎随时交流。

关于好友动态部分的实现,根据你的应用量级,以及好友关系的存储各有不同,大家自己集思广益即可,大部分都是先查好友关系再查动态,关联查询也可以,自己实现吧。

总结

위 내용은 사용자 동적 모듈 개발을 구현하는 Laravel의 예 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

phpidifiesauser의 sssessionusessessioncookiesandssessionids.1) whensession_start () iscalled, phpgeneratesauniquessessionStoredInacookienamedPhpsSessIdonSeuser 'sbrowser.2) thisidallowsphptoretrievessessionDataTromServer.

PHP 세션을 확보하기위한 모범 사례는 무엇입니까?PHP 세션을 확보하기위한 모범 사례는 무엇입니까?May 01, 2025 am 12:22 AM

PHP 세션의 보안은 다음 측정을 통해 달성 할 수 있습니다. 1. Session_REGENEREAT_ID ()를 사용하여 사용자가 로그인하거나 중요한 작업 일 때 세션 ID를 재생합니다. 2. HTTPS 프로토콜을 통해 전송 세션 ID를 암호화합니다. 3. 세션 _save_path ()를 사용하여 세션 데이터를 저장하고 권한을 올바르게 설정할 보안 디렉토리를 지정하십시오.

PHP 세션 파일은 기본적으로 어디에 저장됩니까?PHP 세션 파일은 기본적으로 어디에 저장됩니까?May 01, 2025 am 12:15 AM

phpsessionfilesarestoredInTheRectorySpecifiedBysession.save_path, 일반적으로/tmponunix-likesystemsorc : \ windows \ temponwindows.tocustomizethis : 1) austession_save_path () toSetacustomDirectory, verlyTeCustory-swritation;

PHP 세션에서 데이터를 어떻게 검색합니까?PHP 세션에서 데이터를 어떻게 검색합니까?May 01, 2025 am 12:11 AM

toretrievedatafromAphPsession, startSessionstart_start () andaccessvariblesinthe $ _sessionArray.forexample : 1) startthessession : session_start (). 2) retrievedata : $ _ session [ 'username']; echo "Welcome,". $ username;

세션을 사용하여 쇼핑 카트를 구현할 수있는 방법은 무엇입니까?세션을 사용하여 쇼핑 카트를 구현할 수있는 방법은 무엇입니까?May 01, 2025 am 12:10 AM

세션을 사용하여 효율적인 쇼핑 카트 시스템을 구축하는 단계에는 다음이 포함됩니다. 1) 세션의 정의와 기능을 이해합니다. 세션은 요청에 따라 사용자 상태를 유지하는 데 사용되는 서버 측 스토리지 메커니즘입니다. 2) 쇼핑 카트에 제품 추가와 같은 기본 세션 관리를 구현합니다. 3) 제품 수량 관리 및 삭제 지원 고급 사용으로 확장; 4) 세션 데이터를 지속하고 보안 세션 식별자를 사용하여 성능 및 보안을 최적화합니다.

PHP에서 인터페이스를 어떻게 생성하고 사용합니까?PHP에서 인터페이스를 어떻게 생성하고 사용합니까?Apr 30, 2025 pm 03:40 PM

이 기사는 PHP의 인터페이스를 생성, 구현 및 사용하는 방법을 설명하여 코드 구성 및 유지 관리에 대한 이점에 중점을 둡니다.

crypt ()와 password_hash ()의 차이점은 무엇입니까?crypt ()와 password_hash ()의 차이점은 무엇입니까?Apr 30, 2025 pm 03:39 PM

이 기사에서는 PHP의 암호 해싱에 대한 Crypt ()와 Password_hash ()의 차이점에 대해 논의하여 최신 웹 애플리케이션에 대한 구현, 보안 및 적합성에 중점을 둡니다.

PHP의 크로스 사이트 스크립팅 (XSS)을 어떻게 방지 할 수 있습니까?PHP의 크로스 사이트 스크립팅 (XSS)을 어떻게 방지 할 수 있습니까?Apr 30, 2025 pm 03:38 PM

기사는 입력 유효성 검사, 출력 인코딩 및 OWASP ESAPI 및 HTML 청정기와 같은 도구를 통해 PHP의 크로스 사이트 스크립팅 (XSS) 방지에 대해 논의합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.