codeigniter 4 маршрутизация с именами маршрутов не генерирует - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть маршрут, который должен генерировать href для тега привязки, но я не получаю href:

<a href="" style="color:white !important" class="btn btn-info postlist">Update</a>

Мой код для выше:

data[i]["confirm"] = '<a href="<?=route_to('updatePost', 1) ?>" style="color:white !important" class="btn btn-info postlist">Update</a>';

Мой маршрут :

//$routes->add('post/(:id)', 'App/Controllers/Post::updatepost/$1');
$routes->add('post/(:id)', 'Post::updatepost/$1', ['as' => 'updatePost']);

Я ожидаю что-то вроде this

Отметил: пробовал безымянный и безымянный способ, и оба не генерировали href

1 Ответ

1 голос
/ 26 апреля 2020

Краткий ответ: (: id) не поддерживается. Это устарело в пользу использования (: num)

Так что быстрое решение заключается в использовании (: num) вместо (: id)

Это то же самое .

Временное исправление - это изменение файла ядра, если вам действительно это действительно нужно.

Отказ от ответственности: НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ, НЕ изменять базовые файлы. Делайте это на свой страх и риск

В файле /system/Router/RouteCollection.php - LINE 117

Было:

/**
 * Defined placeholders that can be used
 * within the
 *
 * @var array
 */
protected $placeholders = [
    'any'      => '.*',
    'segment'  => '[^/]+',
    'alphanum' => '[a-zA-Z0-9]+',
    'num'      => '[0-9]+',
    'alpha'    => '[a-zA-Z]+',
    'hash'     => '[^/]+',
];

Если вам это действительно нужно, это может быть:

/**
 * Defined placeholders that can be used
 * within the
 *
 * @var array
 */
protected $placeholders = [
    'any'      => '.*',
    'segment'  => '[^/]+',
    'alphanum' => '[a-zA-Z0-9]+',
    'num'      => '[0-9]+',
    'alpha'    => '[a-zA-Z]+',
    'hash'     => '[^/]+',
    'id'       => '[0-9]+'
];

Изменение заключается в добавлении 'id' запись, которая имитирует 'num' .

Это было бы НАМНОГО БЕЗОПАСНО для простого Изменить все ссылки на (: id) на (: num)

...