# AppException

## `render404()`

This method is used to display a `404` error page when a resource is not found. It checks the debug mode and displays detailed information if debug mode is enabled; otherwise, it displays a general message.

* Sets the HTTP response code to the error code (404).
* If debug mode is enabled, it displays detailed error information including the error code, error message, file, line, and trace.
* If debug mode is disabled, it displays a general 404 error message.
* Uses the `Render` class to display the 404 error page.
* Stops further execution using `exit()`.

Example:

```php
$exception = new AppException("Page not found", 0, null, 404);
$exception->handle();
```

## `renderError()`

This method is used to display exception information in HTML format for the user. It also checks the debug mode and displays detailed information if debug mode is enabled; otherwise, it displays a general message.

* Sets the HTTP response code to the error code (500 or other error codes).
* If debug mode is enabled, it displays detailed error information including the error code, error message, file, line, and trace.
* If debug mode is disabled, it displays a general error message.
* Stops further execution using `exit()`.

```php
$exception = new AppException("Internal Server Error", 0, null, 500);
$exception->handle();
```

## `handle()`

This method handles the exception, logs it, and displays the error information to the user. It checks the error status code and calls the corresponding method (`render404` or `renderError`).

* Logs the error using the `Logger` class.
* Checks the error status code:
  * If it is 404, calls the `render404()` method.
  * If it is another error code, calls the `renderError()` method.

Example:

```php
try {
    // Some code that may throw an exception
    throw new AppException("Page not found", 0, null, 404);
} catch (AppException $e) {
    $e->handle();
}
```

## Using in Controller

```php
<?php
namespace App\Controllers;

use System\Core\BaseController;
use System\Core\AppException;

class UserController extends BaseController {

    public function index() {
        try {
            // Simulate an error (e.g., user not found)
            $user = $this->findUserById(1);
            if (!$user) {
                throw new AppException('User not found!', 0, null, 404);
            }

            // Render the user data
            $this->render('user/profile', ['user' => $user]);

        } catch (AppException $e) {
            // Handle the exception
            $e->handle();
        }
    }

    private function findUserById($id) {
        // Sample method to simulate user fetching; returns null to simulate "user not found"
        return null;
    }
}
```

**How It Works:**

* `try {}` → Starts the error-handling block.
* Attempts to find the user using `findUserById(1)`.
* If the user is not found (`null`), throws an **AppException** with the message `"User not found!"` and error code `404`.
* If no error occurs, **renders the user profile page** using `render('user/profile', ['user' => $user])`.
* `catch (AppException $e) {}` → If an error occurs, it is handled by calling `$e->handle();`, which may log the error or display an error page.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cmsfullform.com/documents/core/appexception.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
