<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fetch Flarum discussions in Laravel Archives - Artificial Intelligence</title>
	<atom:link href="https://www.aiuniverse.xyz/tag/fetch-flarum-discussions-in-laravel/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.aiuniverse.xyz/tag/fetch-flarum-discussions-in-laravel/</link>
	<description>Exploring the universe of Intelligence</description>
	<lastBuildDate>Tue, 03 Feb 2026 17:39:20 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>How to Show Flarum Discussions on a Laravel Website</title>
		<link>https://www.aiuniverse.xyz/how-to-show-flarum-discussions-on-a-laravel-website/</link>
					<comments>https://www.aiuniverse.xyz/how-to-show-flarum-discussions-on-a-laravel-website/#respond</comments>
		
		<dc:creator><![CDATA[Maruti Kr.]]></dc:creator>
		<pubDate>Tue, 03 Feb 2026 17:39:19 +0000</pubDate>
				<category><![CDATA[Flarum]]></category>
		<category><![CDATA[display Flarum discussions on website]]></category>
		<category><![CDATA[fetch Flarum discussions in Laravel]]></category>
		<category><![CDATA[fetch forum discussions using Laravel]]></category>
		<category><![CDATA[Flarum API Laravel example]]></category>
		<category><![CDATA[Flarum discussions frontend JavaScript]]></category>
		<category><![CDATA[Flarum discussions homepage widget]]></category>
		<category><![CDATA[Flarum discussions Laravel integration]]></category>
		<category><![CDATA[Flarum discussions UI implementation]]></category>
		<category><![CDATA[Flarum JSON API example]]></category>
		<category><![CDATA[Flarum REST API tutorial]]></category>
		<category><![CDATA[integrate Flarum forum with Laravel]]></category>
		<category><![CDATA[Laravel backend proxy API]]></category>
		<category><![CDATA[Laravel community forum integration]]></category>
		<category><![CDATA[Laravel Flarum API integration]]></category>
		<category><![CDATA[show forum discussions in Laravel]]></category>
		<guid isPermaLink="false">https://www.aiuniverse.xyz/?p=21763</guid>

					<description><![CDATA[<p>Modern websites often need to display content from multiple platforms on a single homepage. A common example is showing WordPress blog posts or community discussions directly on a Laravel-based site without breaking layout or performance. In this article, we’ll explain the best and most stable approach to fetch and display Flarum discussions on a Laravel <a class="read-more-link" href="https://www.aiuniverse.xyz/how-to-show-flarum-discussions-on-a-laravel-website/">Read More</a></p>
<p>The post <a href="https://www.aiuniverse.xyz/how-to-show-flarum-discussions-on-a-laravel-website/">How to Show Flarum Discussions on a Laravel Website</a> appeared first on <a href="https://www.aiuniverse.xyz">Artificial Intelligence</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="840" height="558" src="https://www.aiuniverse.xyz/wp-content/uploads/2026/02/How-to-Show-Flarum-Discussions-on-a-Laravel-Website.png" alt="" class="wp-image-21764" srcset="https://www.aiuniverse.xyz/wp-content/uploads/2026/02/How-to-Show-Flarum-Discussions-on-a-Laravel-Website.png 840w, https://www.aiuniverse.xyz/wp-content/uploads/2026/02/How-to-Show-Flarum-Discussions-on-a-Laravel-Website-300x199.png 300w, https://www.aiuniverse.xyz/wp-content/uploads/2026/02/How-to-Show-Flarum-Discussions-on-a-Laravel-Website-768x510.png 768w" sizes="(max-width: 840px) 100vw, 840px" /></figure>



<p>Modern websites often need to display content from multiple platforms on a single homepage. A common example is showing <strong>WordPress blog posts</strong> or <strong>community discussions</strong> directly on a Laravel-based site without breaking layout or performance.</p>



<p>In this article, we’ll explain the <strong>best and most stable approach to fetch and display Flarum discussions on a Laravel website</strong>, using the <strong>same concept as WordPress blog fetch</strong>, but implemented correctly for production use.</p>



<p>This guide covers:</p>



<ul class="wp-block-list">
<li>Why backend proxy is the best approach</li>



<li>How Flarum API works</li>



<li>Step-by-step Laravel + JavaScript integration</li>



<li>Clean UI rendering with fail-safe handling</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Why Not Fetch Flarum Directly from Frontend?</h2>



<p>Flarum provides a JSON:API endpoint, so technically you <em>can</em> fetch discussions directly using JavaScript. However, this approach causes multiple problems in real-world projects:</p>



<ul class="wp-block-list">
<li>❌ <strong>CORS issues</strong> (very common)</li>



<li>❌ API rate limits exposed to users</li>



<li>❌ Authentication tokens exposed in frontend</li>



<li>❌ No caching → slow homepage</li>



<li>❌ API failure breaks UI</li>
</ul>



<p>Because of this, <strong>direct frontend fetch is not recommended</strong> for production.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Best Practice: Laravel Backend Proxy (Recommended)</h2>



<p>The <strong>best and safest approach</strong> is:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Laravel Backend → Fetch Flarum API → Convert to simple JSON → Frontend JS renders UI</strong></p>
</blockquote>



<h3 class="wp-block-heading">Benefits:</h3>



<ul class="wp-block-list">
<li>✅ No CORS problems</li>



<li>✅ API tokens stay secure</li>



<li>✅ Easy caching (faster homepage)</li>



<li>✅ Clean error handling</li>



<li>✅ Same pattern as WordPress blog fetch</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 1: Understand the Flarum API Endpoint</h2>



<p>Flarum exposes discussions using JSON:API:</p>



<pre class="wp-block-code"><code>GET https://your-flarum-site.com/api/discussions
</code></pre>



<p>Common parameters:</p>



<ul class="wp-block-list">
<li><code>page[limit]=9</code> → number of discussions</li>



<li><code>sort=-createdAt</code> → latest discussions first</li>



<li><code>include=user,tags</code> → include author and tags</li>
</ul>



<p>Example:</p>



<pre class="wp-block-code"><code>/api/discussions?page&#91;limit]=9&amp;sort=-createdAt&amp;include=user,tags
</code></pre>



<p>The response is <strong>nested and complex</strong>, so we will simplify it in Laravel.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 2: Configure Flarum in Laravel</h2>



<p>Add Flarum configuration in <code>config/services.php</code>:</p>



<pre class="wp-block-code"><code>'flarum' =&gt; &#91;
    'base_url' =&gt; env('FLARUM_BASE_URL'),
    'api_token' =&gt; env('FLARUM_API_TOKEN'), // optional
],
</code></pre>



<p>Add values in <code>.env</code>:</p>



<pre class="wp-block-code"><code>FLARUM_BASE_URL=https://community.example.com
FLARUM_API_TOKEN=
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>If discussions are public, API token is not required.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 3: Create a Laravel Proxy Route</h2>



<p>Create a route that your frontend will call instead of calling Flarum directly.</p>



<pre class="wp-block-code"><code>Route::get('/flarum/discussions', &#91;FlarumController::class, 'discussions'])
    -&gt;name('flarum.discussions');
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 4: Fetch and Normalize Flarum Data (Controller)</h2>



<p>Create a controller that:</p>



<ul class="wp-block-list">
<li>Calls Flarum API</li>



<li>Extracts only required fields</li>



<li>Returns clean JSON</li>



<li>Caches the response</li>
</ul>



<pre class="wp-block-code"><code>class FlarumController extends Controller
{
    public function discussions(Request $request)
    {
        $limit = min((int) $request-&gt;limit ?: 9, 12);

        return Cache::remember("flarum_discussions_$limit", now()-&gt;addMinutes(5), function () use ($limit) {

            $base = rtrim(config('services.flarum.base_url'), '/');

            $response = Http::acceptJson()
                -&gt;get($base . '/api/discussions', &#91;
                    'page' =&gt; &#91;'limit' =&gt; $limit],
                    'sort' =&gt; '-createdAt',
                    'include' =&gt; 'user,tags',
                ]);

            if (!$response-&gt;ok()) {
                return &#91;'success' =&gt; false, 'items' =&gt; &#91;]];
            }

            $json = $response-&gt;json();
            $included = collect($json&#91;'included'] ?? &#91;]);

            $users = $included-&gt;where('type', 'users')-&gt;keyBy('id');
            $tags  = $included-&gt;where('type', 'tags')-&gt;keyBy('id');

            $items = &#91;];

            foreach ($json&#91;'data'] as $d) {
                $authorId = data_get($d, 'relationships.user.data.id');
                $author   = $users&#91;$authorId]&#91;'attributes'] ?? &#91;];

                $items&#91;] = &#91;
                    'title' =&gt; $d&#91;'attributes']&#91;'title'],
                    'link'  =&gt; $base.'/d/'.$d&#91;'attributes']&#91;'slug'],
                    'created_at' =&gt; $d&#91;'attributes']&#91;'createdAt'],
                    'reply_count' =&gt; $d&#91;'attributes']&#91;'replyCount'],
                    'author' =&gt; $author&#91;'displayName'] ?? $author&#91;'username'],
                ];
            }

            return &#91;'success' =&gt; true, 'items' =&gt; $items];
        });
    }
}
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 5: Create Blade Section for Discussions</h2>



<p>Add a section similar to WordPress blog cards:</p>



<pre class="wp-block-code"><code>&lt;div id="flarum-discussions" style="display:none;"&gt;
    &lt;div id="flarum-loading"&gt;Loading discussions...&lt;/div&gt;
    &lt;div id="flarum-grid"&gt;&lt;/div&gt;
&lt;/div&gt;
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 6: Fetch Discussions Using JavaScript</h2>



<p>Now fetch discussions from <strong>your Laravel route</strong>, not from Flarum directly.</p>



<pre class="wp-block-code"><code>&lt;script&gt;
document.addEventListener("DOMContentLoaded", async () =&gt; {

  const section = document.getElementById("flarum-discussions");
  const loading = document.getElementById("flarum-loading");
  const grid    = document.getElementById("flarum-grid");

  section.style.display = "block";

  try {
    const res = await fetch("/flarum/discussions?limit=9");
    const data = await res.json();

    if (!data.success || !data.items.length) throw "No data";

    let html = "";
    data.items.forEach(d =&gt; {
      html += `
        &lt;div class="discussion-card"&gt;
          &lt;a href="${d.link}" target="_blank"&gt;
            &lt;h5&gt;${d.title}&lt;/h5&gt;
            &lt;p&gt;By ${d.author} • ${d.reply_count} replies&lt;/p&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      `;
    });

    grid.innerHTML = html;
    loading.style.display = "none";

  } catch (e) {
    section.style.display = "none";
  }
});
&lt;/script&gt;
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 7: Fail-Safe Handling (Very Important)</h2>



<p>If:</p>



<ul class="wp-block-list">
<li>Flarum is down</li>



<li>API fails</li>



<li>Network error occurs</li>
</ul>



<p>👉 The entire section hides automatically, so <strong>your homepage never breaks</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Final Architecture Overview</h2>



<pre class="wp-block-code"><code>Frontend JS
    ↓
Laravel Proxy Route
    ↓
Flarum JSON API
    ↓
Laravel Normalization + Cache
    ↓
Clean JSON to Frontend
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Conclusion</h2>



<p>If you want to show <strong>Flarum discussions on a Laravel website</strong> using the <strong>same concept as WordPress blog fetch</strong>, the <strong>Laravel backend proxy approach</strong> is the most professional and production-ready solution.</p>



<p>It ensures:</p>



<ul class="wp-block-list">
<li>Better performance</li>



<li>Strong security</li>



<li>Clean UI rendering</li>



<li>No CORS headaches</li>



<li>Scalable architecture</li>
</ul>



<p>This pattern works perfectly for:</p>



<ul class="wp-block-list">
<li>Communities</li>



<li>SaaS dashboards</li>



<li>Blogs + forums combo</li>



<li>Multi-platform content sites</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p>The post <a href="https://www.aiuniverse.xyz/how-to-show-flarum-discussions-on-a-laravel-website/">How to Show Flarum Discussions on a Laravel Website</a> appeared first on <a href="https://www.aiuniverse.xyz">Artificial Intelligence</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aiuniverse.xyz/how-to-show-flarum-discussions-on-a-laravel-website/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
