yii1 acceder atributos del user

normalmente tenemos acceso al id o al username del user que se ha logueado,
si queremos tener acceso a otros atributos debemos setearlos dinamicamente al momento del logueo, asi:

UserIdentity->authenticate(){
....
            $this->setState('nombre_de_campo', $record->nombre_de_campo);

}

y luego desde cualquier parte de la aplicacion lo llamamos asi:

Yii::app()->user->getState("nombre_de_campo")

symfony doctrine setear manualmente el id auto incremental de una entidad


creamos la entidad normalmente que se generará con un id bajo la estrategia AUTO
fijarse que doctrine genera el método getId pero no el de setId...entonces, hay que crearlo.

para poder setear manualmente el id, debemos cambiar dinámicamente por código la estrategia de la entidad, después del persist, antes del flush:

(testeado en symfony 2.8)

                $em = $this->getContainer()->get('doctrine.orm.default_entity_manager');

$name=$input->getArgument('articuloName');
$id=$input->getArgument('articuloId');
$product = new Articulo();
$product->setId($id);
$product->setNombre($name);

$em->persist($product);

$metadata = $em->getClassMetaData(get_class($product));
$metadata->setIdGenerator(new AssignedGenerator());
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);

$em->flush();


cuando no se setee manualmente el id, doctrine tomará como último id ingresado el de mayor valor de la tabla.

FOSUserBundle instalacion

para symfony 3.4

instalar antes:

composer require symfony/templating

luego en config.yml
framework:
    templating:
    engines: ['twig']


descargar el bundle, (para symfony3.0+)

$ composer require friendsofsymfony/user-bundle "~2.0"

El objetivo de este bundle es persistir una clase User en una base de datos.

#src/AppBundle/Entity/User.php

<?php
namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

public function __construct()
{
parent::__construct();
// your own logic
}
}


en security.yml :

# To get started with security, check out the documentation:
# http://symfony.com/doc/current/security.html
security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username
        in_memory:
            memory: ~

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
                # if you are using Symfony < 2.8, use the following config instead:
                # csrf_provider: form.csrf_provider
  
            logout:       true
            anonymous:    true
     
            #anonymous: ~
            # activate different ways to authenticate

            # http://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
            #http_basic: ~

            # http://symfony.com/doc/current/cookbook/security/form_login_setup.html
            #form_login: ~
    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }


agregar en config.yml :

fos_user:
    db_driver: orm # other valid values are 'mongodb' and 'couchdb'
    firewall_name: main
    user_class: AppBundle\Entity\User
    from_email:
        address: "%mailer_user%"
        sender_name: "%mailer_user%"

donde from_email indica los datos a traves de quien se envia el mail de confirmacion al momento de registrarse.

por lo que hay que registrar ese valor en parameters.yml:

mailer_user: alguncorreo@lalala.com

agregar en routing.yml :

fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"

creamos la tabla user por comando:

php bin/console doctrine:schema:update --force



ahora podemos crear un usuario por comando del bundle:

php bin/console fos:user:create

y para loguearnos vamos a usar como username nuestro email, entonces modificamos el security.yml

security:
  providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

ya podemos probar el login:

http://localhost/necosocial/web/app_dev.php/login

symfony creando comandos command

Se guardan en la carpeta Command del bundle.

Extienden de Command...pero comunmente van a extender de ContainerAwareCommand ya que asi tenemos acceso al container y asi llamar a servicios.

Implementan 2 métodos:
-configure, donde se setea el nombre del comando, descripccion y un help
-execute(input,output), aqui se programa el comportamiento del comando el cual tiene como parámetros de entrada(input) y salida/escritura(output) por consola.

el siguiente comando lo llamarias asi:

php app/console test:importLaboratories

<?php
namespace Test\MainBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class ImportLaboratoriesCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
// the name of the command (the part after "app/console")
->setName('test:importLaboratories')

// the short description shown while running "php app/console list"
->setDescription('Importa los laboratorios a nuestra tabla Laboratory.')

// the full command description shown when running the command with
// the "--help" option
->setHelp(<<<EOT
El comando <info>test:importLaboratories</info> Importa los laboratorios de a nuestra tabla Laboratory.
EOT
);
}

protected function execute(InputInterface $input, OutputInterface $output)
{
    // outputs multiple lines to the console (adding "\n" at the end of each line)
    $output->writeln([
        'Importer Laboratories',
        '============',
        '',
    ]);

    // outputs a message followed by a "\n"
    $output->writeln('Whoa!');

    // outputs a message without adding a "\n" at the end of the line
    $output->write('You are about to ');
    $output->write('import laboratories.');
}
}



symfony crear controller por consola

php app/console create:controller

se iniciará la creación interactiva del controller

el nombre debe tener el formato AcmeBundle:Fruta

opcionalmente tambien se pueden crear los actions
que deberán tener el formato listarAction

este comando creará
el controller en

src/AcmeBundle/Controller

y su respectivo template twig del action en

src/AcmeBundle/resources/views/Odbc/listar.html.twig

wampserver3.0.6 cambiar el www root directory



ir a wampserver/bin/apache/apache2.4/conf/httpd.conf

y cambiar las lineas

#DocumentRoot "${INSTALL_DIR}/www"
#<Directory "${INSTALL_DIR}/www/">
DocumentRoot "C:/Users/ibazan/workspace-zennovia-56"
<Directory "C:/Users/ibazan/workspace-zennovia-56">


ir a wampserver/bin/apache/apache2.4/conf/extra/httpd-vhosts.conf

y hacer un cambia similar al anterior

DocumentRoot C:/Users/ibazan/workspace-zennovia-56
<Directory  "C:/Users/ibazan/workspace-zennovia-56/">

symfony crear bundle por consola

php app/console generate:bundle

este comando iniciará la creación de un bundle interactivo

si se quiere evitar la interaccion usar:

php app/console generate:bundle --namespace=Acme/Bundle/BlogBundle --no-interaction


lo que nos dará un skeleton de bundle, incluso ya configurado donde corresponda.

symfony doctrine atributo entidad underscore

si en una entidad tenemos el siguiente atributo

/**
     * @ORM\Column(type="boolean", options={"default"=true})
     */
    private $isActived = false;

y queremos que en la tabla el campo tenga la forma is_activated

en config.yml

doctrine
  orm:
    naming_strategy: doctrine.orm.naming_strategy.underscore

vpn y acceso a internet local a la vez

en windows 10:

ir a
control panel
Network and internet
network and sharing center
change adapter settings

click derecho sobre la VPN y "properties"
ir a la pestaña de "networking"
seleccionar Internet protocol version 4
click en boton "properties"
click en boton "advanced"
 des-checkear la opcion que dice "use default gateway on remote network"
OK

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable