import ExternalLink from 'sentry/components/links/externalLink'; import {Layout, LayoutProps} from 'sentry/components/onboarding/gettingStartedDoc/layout'; import {ModuleProps} from 'sentry/components/onboarding/gettingStartedDoc/sdkDocumentation'; import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step'; import {ProductSolution} from 'sentry/components/onboarding/productSelection'; import {t, tct} from 'sentry/locale'; interface StepsParams { dsn: string; hasPerformance: boolean; hasProfiling: boolean; } // Configuration Start export const steps = ({ dsn, hasPerformance, hasProfiling, }: StepsParams): LayoutProps['steps'] => [ { type: StepType.INSTALL, configurations: [ { description: (

{tct( 'To install the PHP SDK, you need to be using Composer in your project. For more details about Composer, see the [composerDocumentationLink:Composer documentation].', { composerDocumentationLink: ( ), } )}

), language: 'bash', code: 'composer require sentry/sdk', }, ...(hasProfiling ? [ { description: t('Install the Excimer extension via PECL:'), language: 'bash', code: 'pecl install excimer', }, ] : []), ], }, { type: StepType.CONFIGURE, description: t( 'To capture all errors, even the one during the startup of your application, you should initialize the Sentry PHP SDK as soon as possible.' ), configurations: [ { language: 'php', code: `\\Sentry\\init([ 'dsn' => '${dsn}',${ hasPerformance ? ` // Specify a fixed sample rate 'traces_sample_rate' => 1.0,` : '' }${ hasProfiling ? ` // Set a sampling rate for profiling - this is relative to traces_sample_rate 'profiles_sample_rate' => 1.0,` : '' } ]);`, additionalInfo: hasPerformance && (

{tct( 'To instrument certain regions of your code, you can [instrumentationLink:create transactions to capture them].', { instrumentationLink: ( ), } )}

), }, ], }, { type: StepType.VERIFY, description: t( 'In PHP you can either capture a caught exception or capture the last error with captureLastError.' ), configurations: [ { language: 'php', code: ` try { $this->functionFailsForSure(); } catch (\\Throwable $exception) { \\Sentry\\captureException($exception); }`, }, ], }, ]; // Configuration End export function GettingStartedWithPHP({ dsn, activeProductSelection = [], ...props }: ModuleProps) { const hasPerformance = activeProductSelection.includes( ProductSolution.PERFORMANCE_MONITORING ); const hasProfiling = activeProductSelection.includes(ProductSolution.PROFILING); return ; } export default GettingStartedWithPHP;