PHPackages                             publisher/publisher - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. publisher/publisher

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

publisher/publisher
===================

Library to publish multiple entries (all at once).

0.9.1(9y ago)1857MITPHPPHP &gt;=7.0.0

Since Dec 28Pushed 8y ago1 watchersCompare

[ Source](https://github.com/PublisherHub/Publisher)[ Packagist](https://packagist.org/packages/publisher/publisher)[ RSS](/packages/publisher-publisher/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (2)Dependencies (2)Versions (9)Used By (7)

Publisher
=========

[](#publisher)

Publish / post via OAuth1 and OAuth2 services.

Publisher offers classes and interfaces that allow you to post several entries at once.

Main components
===============

[](#main-components)

- Entry
    - EntryInterface and AbstractEntry as an abstraction of entries in a social network
- Mode
    - a strategy of filling an Entry with content
- Selector
    - helps you to collect all parameters that the entry requires (e.g. a forum id if you want to post in a forum)
- Publisher
    - manages postings of multiple entries at once

Installation
============

[](#installation)

The recommended way to install this is through [composer](http://getcomposer.org).

Edit your `composer.json` and add:

```
{
    "require": {
        "publisher/publisher": "dev-master"
    }
}
```

And install dependencies:

```
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar install
```

Suggestions
===========

[](#suggestions)

- Entry
    - publisher/entry\_facebook -&gt; adds entries for posting on Facebook
    - publisher/entry\_twitter -&gt; adds entries for posting on Twitter
    - publisher/entry\_xing -&gt; adds entries for posting on XING
- Mode
    - publisher/mode\_recommendation -&gt; adds mode for publishing

Examples
========

[](#examples)

Examples of basic usage are located in the examples/ directory.

Development
===========

[](#development)

Package structure (namespaces)
------------------------------

[](#package-structure-namespaces)

Szenario: A Service (e.g. social network) called 'Foo' offers to post a status and to post in groups that the user is a member of.

FooEntry:

- Selector
    - FooGroupSelector.php
- FooUserEntry.php
- FooGroupEntry.php

Then we have a mode called 'Recommendation'. It provides the content generation

Recommendation

- Resources
    - config
        - validation.yml
    - views
        - recommendation.html.twig
- src
    - AbstractRecommendation.php
    - Form
        - Type RecommendationType.php

Modes should provide a Form and an base Entity for mapping and for validation. Entries that implement a Mode should implement the abstract entity given by the Mode.

FooRecommendation

- Resources
    - config
        - validation.yml
- src
    - FooUserRecommendation.php
    - FooGroupRecommendation.php

### Please refer to the following repositories for examples:

[](#please-refer-to-the-following-repositories-for-examples)

- Entry
    - publisher/entry\_facebook
    - publisher/entry\_twitter
    - publisher/entry\_xing
- Mode
    - publisher/mode\_recommendation
- Entity
    - publisher/entity\_facebook\_recommendation
    - publisher/entity\_twitter\_recommendation
    - publisher/entity\_xing\_recommendation

Naming Conventions
------------------

[](#naming-conventions)

- EntyNamespace: Publisher\\Entry\\ServiceId
- EntryClassName: ServiceId(User|Page|Group|Forum)Entry
- SelectorNamespace: Publisher\\Entry\\ServiceId\\Selector
- SelectorClassName: ServiceId(User|Page|Group|Forum)Selector

The Selector should be matching with the id of the Entry that it belongs to. If their is no Selector needed, then their is no need to implement one. But you should add the 'Selector' directory nonetheless.

- ModeNamespace: Publisher\\Mode\\ModeId
- ModeClass: ModeIdMode

Then we have the EntryModeEntities. The implement an base mode entity like AbstractRecommendation for a specific entry type of a service.

- EntityNamespace: Publisher\\Entry\\ServiceId\\Mode\\ModeId\\
- EntityClass: EntryIdModeId

It is recommended to follow these conventions. In this way you can rely on the already implemented Supervisor to find the Entries and Modes, when the EntryHelper requires them.

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~56 days

Total

3

Last Release

3313d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a7c1545fe1a0a16809d803a59e65034da1437bbe9b21c8636907a9c78d101c89?d=identicon)[JLueke](/maintainers/JLueke)

---

Top Contributors

[![JLueke](https://avatars.githubusercontent.com/u/17501454?v=4)](https://github.com/JLueke "JLueke (39 commits)")

---

Tags

oauthpublishpostpublisher

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/publisher-publisher/health.svg)

```
[![Health](https://phpackages.com/badges/publisher-publisher/health.svg)](https://phpackages.com/packages/publisher-publisher)
```

###  Alternatives

[hwi/oauth-bundle

Support for authenticating users using both OAuth1.0a and OAuth2 in Symfony.

2.4k21.5M69](/packages/hwi-oauth-bundle)[simplesamlphp/simplesamlphp

A PHP implementation of a SAML 2.0 service provider and identity provider.

1.1k12.4M193](/packages/simplesamlphp-simplesamlphp)[knpuniversity/oauth2-client-bundle

Integration with league/oauth2-client to provide services

83416.7M61](/packages/knpuniversity-oauth2-client-bundle)[friendsofsymfony/oauth2-php

OAuth2 library

51618.0M21](/packages/friendsofsymfony-oauth2-php)[bshaffer/oauth2-server-httpfoundation-bridge

A bridge to HttpFoundation for oauth2-server-php

522.3M12](/packages/bshaffer-oauth2-server-httpfoundation-bridge)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
