Using ShoeResponder¶
When your application handles a request, you need to send back a response: HTML pages, JSON data, plain text, or error messages. LacePHP gives you a simple, consistent response API via ShoeResponder.
Use the helper function kickback() to get the shared instance:
use function kickback;
$responder = kickback();
// same as \Lacebox\Sole\Http\ShoeResponder::getInstance()
Tip: We have one responder instance which means all headers, status codes, and payload data go through the same object. This keeps your output predictable and easy to test.
HTML and Plain Text¶
HTML: for rendering full pages or snippets
Text: for simple plain-text responses (debug, CLI output, etc.)
// In a controller or route closure
return kickback()->html('<h1>Welcome to LacePHP</h1>');
// Return plain text
return kickback()->text('Operation completed successfully.');
Internally, these methods:
Set the Content-Type header
Send the HTTP status code if headers aren’t already sent
Return your string directly
JSON Responses¶
Use json() to return data as JSON. LacePHP will set the correct header and encode your payload:
$data = ['user' => ['id'=>1, 'name'=>'Alice']];
return kickback()->json($data, 200, ['X-Custom' => 'Value']);
200 is the status code
The third parameter lets you add extra headers
Error Responses¶
For common HTTP errors, ShoeResponder chooses HTML or JSON based on the client’s Accept header:
// 404 Not Found
return kickback()->notFound('Page not found.');
// 401 Unauthorized
return kickback()->unauthorized('Please log in.');
// 500 Server Error
return kickback()->serverError('Unexpected error occurred.');
Behind the scenes, these methods call wantsHtml() to detect if the client prefers HTML. If so, they render an error template; otherwise they return JSON.
Custom Error Pages¶
You can supply your own HTML templates in weave/Views/errors/404.html and 500.html. ShoeResponder’s renderErrorPage() will:
Look up your path in config(‘errors.templates’)
Fallback to shoebox/views/errors/{code}.html.php
If missing, simply output the error message
Headers & Status Codes¶
ShoeResponder tracks headers internally, so you can inspect or modify them before sending:
$responder = kickback();
$responder->setHeader('X-Trace-ID', session_id());
$current = $responder->getHeaders();
// e.g. ['Content-Type'=>'application/json', 'X-Trace-ID'=>'abc123']
Payload Data & Recording¶
If you integrate LacePHP’s Recorder, you can capture full request/response cycles. ShoeResponder provides:
withData(array $data) to store a payload for later recording
toArray() to export status, headers, and data
Use it like this:
// Prepare payload and record it later
return kickback()
->withData(['result'=>'ok', 'time'=>microtime(true)])
->json(['result'=>'ok']);
Putting It All Together¶
Example in a controller method:
class ArticleController
{
public function show($id)
{
$article = Article::find($id);
if (! $article) {
// Record 404 page view then send response
return kickback()->notFound("Article {$id} not found.");
}
// Safe to render HTML or JSON
if (sole_request()->header('Accept') === 'application/json') {
return kickback()->json(['article' => $article]);
}
$html = view('article/show', ['article' => $article]);
return kickback()->html($html);
}
}