> ## Documentation Index
> Fetch the complete documentation index at: https://filament-34a8cf01.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Text input column

> [!WARNING]
>
> You are currently viewing the documentation for Filament 4.x, which is a previous version of Filament.
>
> Looking for the current stable version? Visit the [5.x documentation](https://filament-34a8cf01.mintlify.site/5.x/tables/columns/text-input.md).

## Introduction

The text input column allows you to render a text input inside the table, which can be used to update that database record without needing to open a new page or a modal:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('email')
```

Loading preview

![Text input column](https://filament-34a8cf01.mintlify.site/docs/images/4.x/light/tables/columns/text-input/simple.jpg)

## Validation

You can validate the input by passing any [Laravel validation rules](https://laravel.com/docs/validation#available-validation-rules) in an array:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('name')
    ->rules(['required', 'max:255'])
```

## Customizing the HTML input type

You may use the `type()` method to pass a custom [HTML input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types):

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('background_color')->type('color')
```

## Setting the HTML input mode

You may use the `inputMode()` method to set the [HTML inputmode attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode), which hints at the type of keyboard to show on mobile. For numeric inputs, use `inputMode('decimal')` for decimal values or `inputMode('numeric')` for integers:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('quantity')
    ->type('number')
    ->inputMode('decimal')
```

## Setting the numeric step

When using `type('number')`, you may use the `step()` method to set the [HTML step attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#step). Use `step('any')` for decimal values or `step('1')` for integers:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('quantity')
    ->type('number')
    ->inputMode('decimal')
    ->step('1')
```

## Adding affix text aside the field

You may place text before and after the input using the `prefix()` and `suffix()` methods:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('domain')
    ->prefix('https://')
    ->suffix('.com')
```

<details>
  <summary />

  [Learn more about utility injection.](https://filament-34a8cf01.mintlify.site/4.x/tables/columns/overview.md#column-utility-injection)
</details>

Loading preview

![Text input column with affixes](https://filament-34a8cf01.mintlify.site/docs/images/4.x/light/tables/columns/text-input/affix.jpg)

### Using icons as affixes

You may place an [icon](https://filament-34a8cf01.mintlify.site/4.x/styling/icons.md) before and after the input using the `prefixIcon()` and `suffixIcon()` methods:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;
use Filament\Support\Icons\Heroicon;

TextInputColumn::make('domain')
    ->prefixIcon(Heroicon::GlobeAlt)
    ->suffixIcon(Heroicon::CheckCircle)
```

<details>
  <summary />

  [Learn more about utility injection.](https://filament-34a8cf01.mintlify.site/4.x/tables/columns/overview.md#column-utility-injection)
</details>

Loading preview

![Text input column with prefix icon](https://filament-34a8cf01.mintlify.site/docs/images/4.x/light/tables/columns/text-input/prefix-icon.jpg)

#### Setting the affix icon's color

Affix icons are gray by default, but you may set a different color using the `prefixIconColor()` and `suffixIconColor()` methods:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Tables\Columns\TextInputColumn;
use Filament\Support\Icons\Heroicon;

TextInputColumn::make('status')
    ->suffixIcon(Heroicon::CheckCircle)
    ->suffixIconColor('success')
```

<details>
  <summary />

  [Learn more about utility injection.](https://filament-34a8cf01.mintlify.site/4.x/tables/columns/overview.md#column-utility-injection)
</details>

Loading preview

![Text input column with suffix icon in color](https://filament-34a8cf01.mintlify.site/docs/images/4.x/light/tables/columns/text-input/suffix-icon-color.jpg)

## Lifecycle hooks

Hooks may be used to execute code at various points within the input's lifecycle:

```php theme={"theme":"gruvbox-dark-hard"}
TextInputColumn::make()
    ->beforeStateUpdated(function ($record, $state) {
        // Runs before the state is saved to the database.
    })
    ->afterStateUpdated(function ($record, $state) {
        // Runs after the state is saved to the database.
    })
```

## Security

### Authorization

Text input columns do not automatically check model policies. Without an authorization check, users can update the column for records accessible through the table query, even if the record's `update()` policy denies access to its edit page. Use `disabled()` with your authorization logic, for example `disabled(fn ($record) => $record->user_id !== auth()->id())`. Filament checks this condition on the server before saving.

Check permission for the specific attribute being changed. If the column updates a related model or pivot, authorize that operation too. Alternatively, use a resource edit page or a policy-backed `EditAction` to apply the resource's edit authorization.

[Edit this page on GitHub](https://github.com/filamentphp/filament/edit/4.x/packages/tables/docs/02-columns/08-text-input.md)

## Sponsored by

[Your logo here](https://github.com/sponsors/danharrin)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.