Ho notato una cosa
Così funziona il primo path "List" ma non il "Create" e tutti gli altri.
'rules'=>array(
// REST patterns
'api/<controller>' => array('<controller>Json/index', 'verb'=>'GET'), // List
'api/<controller:\w+>' => array('<controller>Json/create', 'verb'=>'POST'), // Create
'api/<controller:\w+>/<id:\d+>' => array('<controller>Json/view', 'verb'=>'GET'), //Read
'api/<controller:\w+>/<id:\d+>' => array('<controller>Json/update', 'verb'=>'PUT'), //Update
'api/<controller:\w+>/<id:\d+>' => array('<controller>Json/delete', 'verb'=>'DELETE'), //Delete
// WEB patterns
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
Così
'rules'=>array(
// REST patterns
'api/<controller>' => array('<controller>Json/index', 'verb'=>'GET'), // List
'api/<controller:\w+>' => array('<controller>Json/create', 'verb'=>'POST'), // Create
'api/<controller>/<id:\d+>' => array('<controller>Json/view', 'verb'=>'GET'), //Read
'api/<controller:\w+>/<id:\d+>' => array('<controller>Json/update', 'verb'=>'PUT'), //Update
'api/<controller:\w+>/<id:\d+>' => array('<controller>Json/delete', 'verb'=>'DELETE'), //Delete
// WEB patterns
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
Funzionano "List" e "Read" ma non tutti gli altri…
Se ho pattern uguali ma verb diversi mi si incartano le regexp!
Se, per fare un test, cambio l’identificatore <controller> con uno diverso per ogni pattern es.
'rules'=>array(
// REST patterns
'api/<list>' => array('<list>Json/index', 'verb'=>'GET'), // List
'api/<create>' => array('<create>Json/create', 'verb'=>'POST'), // Create
'api/<read>/<id:\d+>' => array('<read>Json/view', 'verb'=>'GET'), //Read
'api/<update>/<id:\d+>' => array('<update>Json/update', 'verb'=>'PUT'), //Update
'api/<delete>/<id:\d+>' => array('<delete>Json/delete', 'verb'=>'DELETE'), //Delete
// WEB patterns
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
funzionano tutti.
Non so spiegarmi il perché.