xrow/salesforce-bundle
Symfony bundle from xrow that simplifies Salesforce integration for PHP apps, providing API access, authentication, and tools to exchange and sync CRM data between your application and Salesforce. Connect services, query objects, and keep business data consistent without low-level Salesforce plumbin...
Verdict: do not adopt. Treat as design reference only.
The package is a Symfony2 bundle, not a Laravel package, despite the "Laravel/PHP" framing. Its value is architectural precedent, not deployable code.
xrow/salesforce-bundle is built on Symfony's bundle contract: a Bundle class, a DI Extension with a Configuration tree, service definitions in XML/YAML, and event-dispatcher hooks. Laravel consumes a handful of Symfony components (HttpFoundation, Console, Process), but has no bundle system, no container extension points of that shape, and no autoload path that would resolve the bundle's service wiring. Porting is a rewrite, not an integration. If the target is actually Symfony, the fit is still poor: the bundle targets Symfony 2.x, which reached end of life in November 2018.composer.json constraints that hard-fail on PHP 8.2/8.3 and Composer 2. Zero stars, zero dependents, zero issue traffic means the code paths have not been exercised against any modern runtime. Beyond PHP: Salesforce retires API versions about three years after release, so any pinned 2015-era endpoint (v2x–v3x) returns 410/INVALID_VERSION today. The 2015-era auth pattern is almost certainly username + password + security token, which Salesforce disabled by default in 2021 and which many orgs will not re-enable.composer require will either fail resolution outright or, worse, succeed in an isolated legacy environment and lock the team to an unsupportable stack. Supply-chain risk is unmanaged: no security advisories, no CVE monitoring, and any transitive dependencies are equally abandoned.Key questions to resolve before any build decision:
Recommendation: do not add this package to composer.json in either stack. Extract intent from the bundle (object/field mapping conventions, config shape) and implement against a current client.
Path A — Laravel target. No bundle path exists. Build a thin adapter: a SalesforceClient interface with query(), find(), create(), update(), upsert(), bulkIngest(), bound to a concrete implementation over Laravel's Http client with an OAuth 2.0 token manager. This is a few hundred lines and fully owned. Evaluate maintained alternatives (e.g. omniphx/forrest) as a starting reference, but keep the interface boundary so the transport is swappable.
Path B — Symfony 6.4/7.x target. Still no drop-in. Either a maintained SOAP client (phpforce/soap-client) if the requirement is genuinely SOAP, or the same REST adapter built on symfony/http-client. Do not fork the bundle; the fork cost exceeds the rewrite cost.
Compatibility baseline to design against: PHP 8.2+, Composer 2, Laravel 10/11 or Symfony 6.4/7.x, Salesforce API at or near the current stable version, OAuth 2.0 JWT bearer for server-to-server or web-server flow with refresh tokens.
Suggested sequencing:
SOQL query. This is the only genuinely uncertain step; everything after is engineering.upsert so retries cannot duplicate records.| Option | Effort | Risk | Recommendation |
|---|---|---|---|
| Install bundle as-is | Low | Very high (won't run) | No |
| Fork and modernize bundle | High | High | No |
| Thin REST adapter, own it | Medium | Low | Yes |
| Maintained third-party client + adapter | Medium | Medium | Yes, behind interface |
410/INVALID_VERSION on a previously working deployment.REQUEST_LIMIT_EXCEEDED under volume — needs backoff and queueing, not retry-storming.How can I help you explore Laravel packages today?