import ExternalLink from 'sentry/components/links/externalLink'; import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step'; import type { Docs, DocsParams, OnboardingConfig, } from 'sentry/components/onboarding/gettingStartedDoc/types'; import { getCrashReportModalConfigDescription, getCrashReportModalIntroduction, getCrashReportPHPInstallStep, } from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding'; import replayOnboardingJsLoader from 'sentry/gettingStartedDocs/javascript/jsLoader/jsLoader'; import {t, tct} from 'sentry/locale'; type Params = DocsParams; const onboarding: OnboardingConfig = { introduction: () => tct( 'Symfony is supported via the [code:sentry-symfony] package as a native bundle.', {code: } ), install: (params: Params) => [ { type: StepType.INSTALL, configurations: [ { language: 'bash', description: (

{tct('Install the [code:sentry/sentry-symfony] bundle:', {code: })}

), code: 'composer require sentry/sentry-symfony', }, ...(params.isProfilingSelected ? [ { description: t('Install the Excimer extension via PECL:'), language: 'bash', code: 'pecl install excimer', }, ] : []), ], }, ], configure: (params: Params) => [ { type: StepType.CONFIGURE, configurations: [ { description: (

{tct('Add your DSN to your [code:.env] file:', {code: })}

), language: 'shell', code: ` ###> sentry/sentry-symfony ### SENTRY_DSN="${params.dsn}" ###< sentry/sentry-symfony ### `, }, ...(params.isPerformanceSelected || params.isProfilingSelected ? [ { description: (

{tct( 'Add further configuration options to your [code:config/packages/sentry.yaml] file:', {code: } )}

), language: 'yaml', code: `when@prod: sentry: dsn: '%env(SENTRY_DSN)%'${ params.isPerformanceSelected ? ` # Specify a fixed sample rate traces_sample_rate: 1.0` : '' }${ params.isProfilingSelected ? ` # Set a sampling rate for profiling - this is relative to traces_sample_rate profiles_sample_rate: 1.0` : '' }`, }, ] : []), ], }, ], verify: () => [ { type: StepType.VERIFY, configurations: [ { language: 'php', code: ` logger = $logger; } /** * @Route(name="sentry_test", path="/_sentry-test") */ public function testLog() { // the following code will test if monolog integration logs to sentry $this->logger->error('My custom logged error.'); // the following code will test if an uncaught exception logs to sentry throw new \\RuntimeException('Example exception.'); } } `, }, ], additionalInfo: (

{tct( "After you visit the [code:/_sentry-test page], you can view and resolve the recorded error by logging into [sentryLink:sentry.io] and opening your project. Clicking on the error's title will open a page where you can see detailed information and mark it as resolved.", {sentryLink: , code: } )}

), }, ], nextSteps: () => [], }; const crashReportOnboarding: OnboardingConfig = { introduction: () => getCrashReportModalIntroduction(), install: (params: Params) => getCrashReportPHPInstallStep(params), configure: () => [ { type: StepType.CONFIGURE, description: getCrashReportModalConfigDescription({ link: 'https://docs.sentry.io/platforms/php/guides/symfony/user-feedback/configuration/#crash-report-modal', }), }, ], verify: () => [], nextSteps: () => [], }; const docs: Docs = { onboarding, replayOnboardingJsLoader, crashReportOnboarding, }; export default docs;