Encaminamiento Yii2 al usar los nombres de acción de CamelCase

Si tiene, diga la siguiente estructura de controlador

<?php namespace app\controllers; use Yii; use yii\web\Controller; /** * Test controller */ class TestController extends Controller { public function actionMyaction(){ ... //action logic } public function actionMyAction(){ ... //action logic } } 

Se puede acceder a la primera ruta usando la ruta example.com/test/myaction

La segunda ruta por lógica Yii 1.x debe ser accesible desde la ruta example.com/test/myAction en el enrutamiento Yii2.x está utilizando estructura con guiones y solo se puede acceder desde example.com/test/my-action

¿Hay alguna forma de habilitar el enrutamiento utilizando la estructura camelCase en Yii2 preferiblemente sin extender con las clases de enrutamiento?

Esto es importante ya que rompe la compatibilidad con versiones anteriores de todos los enlaces (que por supuesto están en todo Internet) y, por lo tanto, la aplicación Yii1.x nunca se puede migrar a Yii2.x incluso si el código se reescribe completamente. ¿Cuál fue el motivo de este cambio?

También me sorprendió un poco este cambio, pero finalmente descubrí que hace que la URL sea más fácil de leer. No estaba seguro de tener una ruta sensible a mayúsculas y minúsculas en Yii1, en Yii2. Ya no tengo este problema (o la impresión de un problema).

No estoy seguro de la razón exacta, pero puedo decirte que para SEO es mejor tener palabras separadas en lugar de tener 1 gran palabra.

Cuando reescribí una aplicación en yii2, puse en el administrador de url todas las rutas antiguas que necesito mantener.

  'urlManager' => [ 'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ................................................. 'site/registerInterest' => 'site/register-interest', ................................................. ], ], 

Entonces mis enlaces antiguos funcionan bien. También puede poner un redireccionamiento 301 en .htaccess si desea desde las rutas antiguas a las nuevas para mantener el jugo de SEO.

Puede crear su propio Controlador de Base y sobrescribir createAction con un patrón que permita mayúsculas como

preg_match('/^[a-zA-Z0-9\\-_]

  public function createAction($id) { if ($id === '') { $id = $this->defaultAction; } $actionMap = $this->actions(); if (isset($actionMap[$id])) { return Yii::createObject($actionMap[$id], [$id, $this]); } elseif (preg_match('/^[a-zA-Z0-9\\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) { $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id)))); if (method_exists($this, $methodName)) { $method = new \ReflectionMethod($this, $methodName); if ($method->isPublic() && $method->getName() === $methodName) { return new InlineAction($id, $this, $methodName); } } } return null; }