Antes de contestar me gustaría aclarar un tema de conceptos. Dices "el index del modelo Empresa", pero para ser exactos se trata de la acción index del controlador Empresa. Es bueno siempre utilizar los conceptos correctos a la hora de pedir ayuda para así evitar malos entendidos.
Pasando a tu problema, en esa url que mencionas hay un ejemplo de lo que necesitas:
'posts'=>'post/list',
No he probado esta solución, pero siguiendo esa lógica podrías lograr lo que buscas definiendo la siguiente regla en tu config/main.php :
'empresas'=>'empresa/index',
Para este requerimiento podrías definir una regla como ésta:
'empresas/<nombre:\w+>'=>'empresa/view',
Ahora, para que la regla funcione deberás modificar la acción view del controlador empresa para que cargue la instancia de la empresa basado en el nombre que viene en la url.
public function actionView($nombre) {
$model = Empresas::model()->find('nombre = :nombreUrl', array(':nombreUrl' => $nombre));
if(!$model === null) {
$this->render('view', array('model' => $model));
} else {
throw new CHttpException(404, 'No se ha encontrado la empresa');
}
}
Escribí el código sin realizar alguna prueba (por tiempo), por lo que podría no funcionar correctamente, pero espero que al menos te dé una idea de cómo solucionar tu problema.
Hoy en la mañana terminé un sistema pequeño que utilizaré mañana por la mañana para hacer las pruebas correspondientes al caso que no te está resultando, te cuento los resultados en caso de que aún no logres resolverlo.
Ya sé qué problema tienes, estás agregando las reglas después de las que vienen con Yii. La evaluación de cada patrón se hace de arriba a abajo, por lo tanto yii cree que intentas acceder a la acción "nombre" del controlador empresas.
Para que funcione lo que deseas, debes agregar tu patrón sobre los predeterminados. Si una url no calza con tu patrón, seguirá evaluándose hacía abajo.
Logré hacer lo que necesitaba. No se por qué con tu función me daba error 404, terminé usando:
public function actionView($nombre) {
$model = Empresa::model()->findByAttributes(array('nombre'=>$nombre));
if($model)
$this->render('view', array('model' => $model));
else
throw new CHttpException(404, 'No se ha encontrado la Empresa');
}
y agregué esto en main.php para poder usar la misma idea en un update: