You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.4中$request属性在多方法间取值为null问题排查

Troubleshooting Null emailToken in POST Request

Hey Matt, let's dig into why your emailToken is coming up null in the postOptOut method—since it worked yesterday, the issue is likely a small change or oversight we can track down quickly. Here are the key areas to check:

1. Confirm the emailToken is actually retrieved in the GET request

First, make sure the initial GET call to the external API is still returning a valid token. Add a debug log or dump in your getOptOut method to verify:

public function getOptOut(EmailOptingRequest $request) {
    // ... existing code ...
    $emailToken = json_decode($res->getBody()->getContents(), true)[0]['token'];
    
    // Add this to check if the token is being fetched correctly
    Log::info('Fetched Email Token: ' . $emailToken);
    // Or dump it directly (remove in production)
    dd($emailToken);
    
    return view('customer.email-opting', [
        'customer' => $customer,
        'email' => $email,
        'token' => $token,
        'emailToken' => $emailToken // Only pass needed data to the view
    ]);
}

If this shows null, the problem is with the external API response—maybe their token structure changed overnight. Double-check the raw API response with dd($res->getBody()->getContents()) to confirm the token's location.

2. Ensure the view passes emailToken to the POST form

Your POST request relies on the view sending the token back, so verify your customer.email-opting blade template includes a hidden input for emailToken:

<form method="POST" action="{{ route('postOptOut') }}">
    @csrf
    <!-- Hidden input to pass the email token -->
    <input type="hidden" name="emailToken" value="{{ $emailToken }}">
    
    <!-- Your other form fields for marketing/promotional/etc. -->
    <label>
        <input type="checkbox" name="marketing" value="1" checked>
        Marketing Emails
    </label>
    <!-- ... other checkboxes ... -->
    
    <button type="submit">Update Preferences</button>
</form>

Without this hidden field, the POST request will never receive the emailToken value. Also confirm the form's action points to the correct route for postOptOut.

3. Validate the Request Class isn't filtering out emailToken

Laravel's form request classes automatically strip any fields not defined in their validation rules. Open your EmailOptingRequest and make sure emailToken is included in the rules() method:

public function rules()
{
    return [
        'emailToken' => 'required|string', // Ensure this line exists
        'marketing' => 'nullable|integer',
        'promotional' => 'nullable|integer',
        'news' => 'nullable|integer',
        'feedback' => 'nullable|integer',
    ];
}

If emailToken is missing here, Laravel will discard it from the request, making $request->emailToken return null.

4. Debug the POST Request Payload

If the above steps check out, add a log in postOptOut to see exactly what data is being received:

public function postOptOut(EmailOptingRequest $request) {
    // Log all incoming request data
    Log::info('POST Request Data:', $request->all());
    
    $email_token = $request->emailToken;
    // ... rest of your code ...
}

Check your logs—if emailToken isn't present in the output, the issue is definitely in the view/form. If it is present but still null, double-check for typos (e.g., frontend sending email_token instead of emailToken).

Quick Fix Summary

  • Confirm the external API still returns a valid token in the expected structure
  • Add a hidden emailToken input to your POST form
  • Include emailToken in your EmailOptingRequest validation rules
  • Debug the request payload to verify data is being sent correctly

内容的提问来源于stack exchange,提问作者Matt Larsuma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:17:05