This document provides best practices for creating third party bundles for Symfony that are fully extensible and overridable. It discusses naming conventions, directory structure, classes, coding standards, tests, documentation, routes, translations, configuration, versioning, services, and mechanisms for inheritance and overriding bundles and controllers. Key recommendations include using semantic and descriptive bundle names, following the default Symfony directory structure, coding to the Symfony standard, providing over 95% test coverage, documenting via PHPDoc and reStructuredText, namespacing routes by bundle, using the XLIFF format for translations, and allowing bundles and controllers to be overridden through inheritance.
Sobreescritura y extensión de validaciones, formularios y entidadesdualhand
Después de estar trabajando casi dos años en el desarrollo de un conjunto de librerías (o core) que debían compartir el resto de proyectos de clientes de una agencia de publicidad, hemos aprendido muchas cosas de cómo hacer los third-party bundles extensibles y heredables permitiendo adaptarse a todo tipo de proyectos.
En la charla explicaremos estrategias y mecanismos que ofrecen Symfony y Doctrine para conseguir sobreescribir las validaciones y formularios o extender las entidades de Doctrine, como son relaciones mediante interfaces, Load Class Metada event, mapped superclass, Doctrine ORM compiler pass y disciminator map. Todo ello acompañado de ejemplos prácticos.
Por Germán Figna (@gerfigna) y Alfonso Machado (@almacbe)
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Ryan Weaver
If you're like me, you know that being a great backend developer isn't enough. To make *truly* great applications, we need to spend significant time in an area that's moving at a lightning pace: frontend development.
This talk is for you: the backend developer that wants to hook their API's up to rich, interactive JavaScript frontends. To do that, first, we need to demystify a lot of new terms, like ES6/ES2015, ECMAScript, JSX, Babel and the idea that modern JavaScript (surprise) *requires* a build step.
With this in mind, I'll give you a brief introduction into Webpack & the modular development it finally allows.
But the real star is ReactJS. In the frontend world, you never know what new tech will *win*, but React is a star. I'll give you enough of an intro to get you rolling on your project.
The new frontend dev world is huge! Consider the starting line down an exciting new journey.
Like many others, WordPress has been my personal blogging tool for a long time. A powerful tool for easy publishing! That is what everyone wants.
Large sites like TechCrunch and TheNextWeb use it exactly for that reason. And more enterprises seem to discover it as good solution to their too-expensive publication tools. But keeping those WordPress instances running requires skills and knowledge.
Because of WordPress extendibility and its very active community, you can do this too. This tutorial will teach you how use Ansible, Composer, WP-CLI, WP REST API, and Elasticsearch can push WordPress from a personal blogging tool into an enterprise-worthy level application. Out with FTP based SCM ... in with automated deployment, dependency management, and utterly fast search.
Head in the Clouds: Testing Infra as Code - Config Management 2020Peter Souter
Infrastructure-as-code has been one of the key concepts within DevOps to allow the benefits of a full development cycle for infrastructure and allow better visibility of the operations process.
However, when we're writing and applying this IaC, we're often interacting with disparate systems, often geographically dispersed and with very different API's and responses. To further complicate things, different teams also have different concerns: Will this break prod? Will this cost too much? Will this comply with our policies?
We'll be discussing the different kinds of testing that organisations are doing, what tools are right for each job, and how to keep the various teams happy. To do that, we'll be giving some examples with most of the popular IaC tools, where policy fits in and even covering where testing blurs the lines with observability.
Symfony 4 is a very different framework from the previous versions. Symfony 4 provides a new developer experience on a very stable foundation. Learn more about how you can quickly develop new applications and how you can grow your projects from a micro-style app to a full monolith or a set of micro-services.
Create a Symfony Application from a Drupal PerspectiveAcquia
This document provides an overview of creating a basic Symfony 2 application from a Drupal perspective. It compares common concepts like models, views, and controllers between the two frameworks. It demonstrates generating entities to represent content types in Symfony and inserting sample data. Basic routing and templating with Twig are also covered. The goal is to explain Symfony concepts and workflows to Drupal developers in familiar terms.
Like many others, WordPress has been my personal blogging tool for a long time. A powerful tool for easy publishing! That is what everyone wants.
Large sites like TechCrunch and TheNextWeb use it exactly for that reason. And more enterprises seem to discover it as good solution to their too-expensive publication tools. But keeping those WordPress instances running requires skills and knowledge.
Because of WordPress extendibility and its very active community, you can do this too. This tutorial will teach you how use Ansible, Composer, WP-CLI, WP REST API, and Elasticsearch can push WordPress from a personal blogging tool into an enterprise-worthy level application. Out with FTP based SCM ... in with automated deployment, dependency management, and utterly fast search.
[Fr] les 4 types de marques sur Internet par SynthesioYann Gourvennec
This document discusses 4 types of brands on the internet and social media. The first type sees little or no buzz and needs to expand its presence. The second focuses on product features and functions through community management. The third has clients that love the brand and it should respond to community requests. The fourth deals with health, security or children and needs to provide reassurance.
Sobreescritura y extensión de validaciones, formularios y entidadesdualhand
Después de estar trabajando casi dos años en el desarrollo de un conjunto de librerías (o core) que debían compartir el resto de proyectos de clientes de una agencia de publicidad, hemos aprendido muchas cosas de cómo hacer los third-party bundles extensibles y heredables permitiendo adaptarse a todo tipo de proyectos.
En la charla explicaremos estrategias y mecanismos que ofrecen Symfony y Doctrine para conseguir sobreescribir las validaciones y formularios o extender las entidades de Doctrine, como son relaciones mediante interfaces, Load Class Metada event, mapped superclass, Doctrine ORM compiler pass y disciminator map. Todo ello acompañado de ejemplos prácticos.
Por Germán Figna (@gerfigna) y Alfonso Machado (@almacbe)
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Ryan Weaver
If you're like me, you know that being a great backend developer isn't enough. To make *truly* great applications, we need to spend significant time in an area that's moving at a lightning pace: frontend development.
This talk is for you: the backend developer that wants to hook their API's up to rich, interactive JavaScript frontends. To do that, first, we need to demystify a lot of new terms, like ES6/ES2015, ECMAScript, JSX, Babel and the idea that modern JavaScript (surprise) *requires* a build step.
With this in mind, I'll give you a brief introduction into Webpack & the modular development it finally allows.
But the real star is ReactJS. In the frontend world, you never know what new tech will *win*, but React is a star. I'll give you enough of an intro to get you rolling on your project.
The new frontend dev world is huge! Consider the starting line down an exciting new journey.
Like many others, WordPress has been my personal blogging tool for a long time. A powerful tool for easy publishing! That is what everyone wants.
Large sites like TechCrunch and TheNextWeb use it exactly for that reason. And more enterprises seem to discover it as good solution to their too-expensive publication tools. But keeping those WordPress instances running requires skills and knowledge.
Because of WordPress extendibility and its very active community, you can do this too. This tutorial will teach you how use Ansible, Composer, WP-CLI, WP REST API, and Elasticsearch can push WordPress from a personal blogging tool into an enterprise-worthy level application. Out with FTP based SCM ... in with automated deployment, dependency management, and utterly fast search.
Head in the Clouds: Testing Infra as Code - Config Management 2020Peter Souter
Infrastructure-as-code has been one of the key concepts within DevOps to allow the benefits of a full development cycle for infrastructure and allow better visibility of the operations process.
However, when we're writing and applying this IaC, we're often interacting with disparate systems, often geographically dispersed and with very different API's and responses. To further complicate things, different teams also have different concerns: Will this break prod? Will this cost too much? Will this comply with our policies?
We'll be discussing the different kinds of testing that organisations are doing, what tools are right for each job, and how to keep the various teams happy. To do that, we'll be giving some examples with most of the popular IaC tools, where policy fits in and even covering where testing blurs the lines with observability.
Symfony 4 is a very different framework from the previous versions. Symfony 4 provides a new developer experience on a very stable foundation. Learn more about how you can quickly develop new applications and how you can grow your projects from a micro-style app to a full monolith or a set of micro-services.
Create a Symfony Application from a Drupal PerspectiveAcquia
This document provides an overview of creating a basic Symfony 2 application from a Drupal perspective. It compares common concepts like models, views, and controllers between the two frameworks. It demonstrates generating entities to represent content types in Symfony and inserting sample data. Basic routing and templating with Twig are also covered. The goal is to explain Symfony concepts and workflows to Drupal developers in familiar terms.
Like many others, WordPress has been my personal blogging tool for a long time. A powerful tool for easy publishing! That is what everyone wants.
Large sites like TechCrunch and TheNextWeb use it exactly for that reason. And more enterprises seem to discover it as good solution to their too-expensive publication tools. But keeping those WordPress instances running requires skills and knowledge.
Because of WordPress extendibility and its very active community, you can do this too. This tutorial will teach you how use Ansible, Composer, WP-CLI, WP REST API, and Elasticsearch can push WordPress from a personal blogging tool into an enterprise-worthy level application. Out with FTP based SCM ... in with automated deployment, dependency management, and utterly fast search.
[Fr] les 4 types de marques sur Internet par SynthesioYann Gourvennec
This document discusses 4 types of brands on the internet and social media. The first type sees little or no buzz and needs to expand its presence. The second focuses on product features and functions through community management. The third has clients that love the brand and it should respond to community requests. The fourth deals with health, security or children and needs to provide reassurance.
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
Mobile App Development Company In Noida | Drona InfotechDrona Infotech
Drona Infotech is a premier mobile app development company in Noida, providing cutting-edge solutions for businesses.
Visit Us For : https://www.dronainfotech.com/mobile-application-development/
How Can Hiring A Mobile App Development Company Help Your Business Grow?ToXSL Technologies
ToXSL Technologies is an award-winning Mobile App Development Company in Dubai that helps businesses reshape their digital possibilities with custom app services. As a top app development company in Dubai, we offer highly engaging iOS & Android app solutions. https://rb.gy/necdnt
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
2024 State of Marketing Report – by HubspotMarius Sescu
https://www.hubspot.com/state-of-marketing
· Scaling relationships and proving ROI
· Social media is the place for search, sales, and service
· Authentic influencer partnerships fuel brand growth
· The strongest connections happen via call, click, chat, and camera.
· Time saved with AI leads to more creative work
· Seeking: A single source of truth
· TLDR; Get on social, try AI, and align your systems.
· More human marketing, powered by robots
ChatGPT is a revolutionary addition to the world since its introduction in 2022. A big shift in the sector of information gathering and processing happened because of this chatbot. What is the story of ChatGPT? How is the bot responding to prompts and generating contents? Swipe through these slides prepared by Expeed Software, a web development company regarding the development and technical intricacies of ChatGPT!
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
Mobile App Development Company In Noida | Drona InfotechDrona Infotech
Drona Infotech is a premier mobile app development company in Noida, providing cutting-edge solutions for businesses.
Visit Us For : https://www.dronainfotech.com/mobile-application-development/
How Can Hiring A Mobile App Development Company Help Your Business Grow?ToXSL Technologies
ToXSL Technologies is an award-winning Mobile App Development Company in Dubai that helps businesses reshape their digital possibilities with custom app services. As a top app development company in Dubai, we offer highly engaging iOS & Android app solutions. https://rb.gy/necdnt
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
2024 State of Marketing Report – by HubspotMarius Sescu
https://www.hubspot.com/state-of-marketing
· Scaling relationships and proving ROI
· Social media is the place for search, sales, and service
· Authentic influencer partnerships fuel brand growth
· The strongest connections happen via call, click, chat, and camera.
· Time saved with AI leads to more creative work
· Seeking: A single source of truth
· TLDR; Get on social, try AI, and align your systems.
· More human marketing, powered by robots
ChatGPT is a revolutionary addition to the world since its introduction in 2022. A big shift in the sector of information gathering and processing happened because of this chatbot. What is the story of ChatGPT? How is the bot responding to prompts and generating contents? Swipe through these slides prepared by Expeed Software, a web development company regarding the development and technical intricacies of ChatGPT!
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
The realm of product design is a constantly changing environment where technology and style intersect. Every year introduces fresh challenges and exciting trends that mold the future of this captivating art form. In this piece, we delve into the significant trends set to influence the look and functionality of product design in the year 2024.
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
Mental health has been in the news quite a bit lately. Dozens of U.S. states are currently suing Meta for contributing to the youth mental health crisis by inserting addictive features into their products, while the U.S. Surgeon General is touring the nation to bring awareness to the growing epidemic of loneliness and isolation. The country has endured periods of low national morale, such as in the 1970s when high inflation and the energy crisis worsened public sentiment following the Vietnam War. The current mood, however, feels different. Gallup recently reported that national mental health is at an all-time low, with few bright spots to lift spirits.
To better understand how Americans are feeling and their attitudes towards mental health in general, ThinkNow conducted a nationally representative quantitative survey of 1,500 respondents and found some interesting differences among ethnic, age and gender groups.
Technology
For example, 52% agree that technology and social media have a negative impact on mental health, but when broken out by race, 61% of Whites felt technology had a negative effect, and only 48% of Hispanics thought it did.
While technology has helped us keep in touch with friends and family in faraway places, it appears to have degraded our ability to connect in person. Staying connected online is a double-edged sword since the same news feed that brings us pictures of the grandkids and fluffy kittens also feeds us news about the wars in Israel and Ukraine, the dysfunction in Washington, the latest mass shooting and the climate crisis.
Hispanics may have a built-in defense against the isolation technology breeds, owing to their large, multigenerational households, strong social support systems, and tendency to use social media to stay connected with relatives abroad.
Age and Gender
When asked how individuals rate their mental health, men rate it higher than women by 11 percentage points, and Baby Boomers rank it highest at 83%, saying it’s good or excellent vs. 57% of Gen Z saying the same.
Gen Z spends the most amount of time on social media, so the notion that social media negatively affects mental health appears to be correlated. Unfortunately, Gen Z is also the generation that’s least comfortable discussing mental health concerns with healthcare professionals. Only 40% of them state they’re comfortable discussing their issues with a professional compared to 60% of Millennials and 65% of Boomers.
Race Affects Attitudes
As seen in previous research conducted by ThinkNow, Asian Americans lag other groups when it comes to awareness of mental health issues. Twenty-four percent of Asian Americans believe that having a mental health issue is a sign of weakness compared to the 16% average for all groups. Asians are also considerably less likely to be aware of mental health services in their communities (42% vs. 55%) and most likely to seek out information on social media (51% vs. 35%).
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
Creative operations teams expect increased AI use in 2024. Currently, over half of tasks are not AI-enabled, but this is expected to decrease in the coming year. ChatGPT is the most popular AI tool currently. Business leaders are more actively exploring AI benefits than individual contributors. Most respondents do not believe AI will impact workforce size in 2024. However, some inhibitions still exist around AI accuracy and lack of understanding. Creatives primarily want to use AI to save time on mundane tasks and boost productivity.
Organizational culture includes values, norms, systems, symbols, language, assumptions, beliefs, and habits that influence employee behaviors and how people interpret those behaviors. It is important because culture can help or hinder a company's success. Some key aspects of Netflix's culture that help it achieve results include hiring smartly so every position has stars, focusing on attitude over just aptitude, and having a strict policy against peacocks, whiners, and jerks.
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
PepsiCo provided a safe harbor statement noting that any forward-looking statements are based on currently available information and are subject to risks and uncertainties. It also provided information on non-GAAP measures and directing readers to its website for disclosure and reconciliation. The document then discussed PepsiCo's business overview, including that it is a global beverage and convenient food company with iconic brands, $91 billion in net revenue in 2023, and nearly $14 billion in core operating profit. It operates through a divisional structure with a focus on local consumers.
Content Methodology: A Best Practices Report (Webinar)contently
This document provides an overview of content methodology best practices. It defines content methodology as establishing objectives, KPIs, and a culture of continuous learning and iteration. An effective methodology focuses on connecting with audiences, creating optimal content, and optimizing processes. It also discusses why a methodology is needed due to the competitive landscape, proliferation of channels, and opportunities for improvement. Components of an effective methodology include defining objectives and KPIs, audience analysis, identifying opportunities, and evaluating resources. The document concludes with recommendations around creating a content plan, testing and optimizing content over 90 days.
How to Prepare For a Successful Job Search for 2024Albert Qian
The document provides guidance on preparing a job search for 2024. It discusses the state of the job market, focusing on growth in AI and healthcare but also continued layoffs. It recommends figuring out what you want to do by researching interests and skills, then conducting informational interviews. The job search should involve building a personal brand on LinkedIn, actively applying to jobs, tailoring resumes and interviews, maintaining job hunting as a habit, and continuing self-improvement. Once hired, the document advises setting new goals and keeping skills and networking active in case of future opportunities.
A report by thenetworkone and Kurio.
The contributing experts and agencies are (in an alphabetical order): Sylwia Rytel, Social Media Supervisor, 180heartbeats + JUNG v MATT (PL), Sharlene Jenner, Vice President - Director of Engagement Strategy, Abelson Taylor (USA), Alex Casanovas, Digital Director, Atrevia (ES), Dora Beilin, Senior Social Strategist, Barrett Hoffher (USA), Min Seo, Campaign Director, Brand New Agency (KR), Deshé M. Gully, Associate Strategist, Day One Agency (USA), Francesca Trevisan, Strategist, Different (IT), Trevor Crossman, CX and Digital Transformation Director; Olivia Hussey, Strategic Planner; Simi Srinarula, Social Media Manager, The Hallway (AUS), James Hebbert, Managing Director, Hylink (CN / UK), Mundy Álvarez, Planning Director; Pedro Rojas, Social Media Manager; Pancho González, CCO, Inbrax (CH), Oana Oprea, Head of Digital Planning, Jam Session Agency (RO), Amy Bottrill, Social Account Director, Launch (UK), Gaby Arriaga, Founder, Leonardo1452 (MX), Shantesh S Row, Creative Director, Liwa (UAE), Rajesh Mehta, Chief Strategy Officer; Dhruv Gaur, Digital Planning Lead; Leonie Mergulhao, Account Supervisor - Social Media & PR, Medulla (IN), Aurelija Plioplytė, Head of Digital & Social, Not Perfect (LI), Daiana Khaidargaliyeva, Account Manager, Osaka Labs (UK / USA), Stefanie Söhnchen, Vice President Digital, PIABO Communications (DE), Elisabeth Winiartati, Managing Consultant, Head of Global Integrated Communications; Lydia Aprina, Account Manager, Integrated Marketing and Communications; Nita Prabowo, Account Manager, Integrated Marketing and Communications; Okhi, Web Developer, PNTR Group (ID), Kei Obusan, Insights Director; Daffi Ranandi, Insights Manager, Radarr (SG), Gautam Reghunath, Co-founder & CEO, Talented (IN), Donagh Humphreys, Head of Social and Digital Innovation, THINKHOUSE (IRE), Sarah Yim, Strategy Director, Zulu Alpha Kilo (CA).
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
The search marketing landscape is evolving rapidly with new technologies, and professionals, like you, rely on innovative paid search strategies to meet changing demands.
It’s important that you’re ready to implement new strategies in 2024.
Check this out and learn the top trends in paid search advertising that are expected to gain traction, so you can drive higher ROI more efficiently in 2024.
You’ll learn:
- The latest trends in AI and automation, and what this means for an evolving paid search ecosystem.
- New developments in privacy and data regulation.
- Emerging ad formats that are expected to make an impact next year.
Watch Sreekant Lanka from iQuanti and Irina Klein from OneMain Financial as they dive into the future of paid search and explore the trends, strategies, and technologies that will shape the search marketing landscape.
If you’re looking to assess your paid search strategy and design an industry-aligned plan for 2024, then this webinar is for you.
5 Public speaking tips from TED - Visualized summarySpeakerHub
From their humble beginnings in 1984, TED has grown into the world’s most powerful amplifier for speakers and thought-leaders to share their ideas. They have over 2,400 filmed talks (not including the 30,000+ TEDx videos) freely available online, and have hosted over 17,500 events around the world.
With over one billion views in a year, it’s no wonder that so many speakers are looking to TED for ideas on how to share their message more effectively.
The article “5 Public-Speaking Tips TED Gives Its Speakers”, by Carmine Gallo for Forbes, gives speakers five practical ways to connect with their audience, and effectively share their ideas on stage.
Whether you are gearing up to get on a TED stage yourself, or just want to master the skills that so many of their speakers possess, these tips and quotes from Chris Anderson, the TED Talks Curator, will encourage you to make the most impactful impression on your audience.
See the full article and more summaries like this on SpeakerHub here: https://speakerhub.com/blog/5-presentation-tips-ted-gives-its-speakers
See the original article on Forbes here:
http://www.forbes.com/forbes/welcome/?toURL=http://www.forbes.com/sites/carminegallo/2016/05/06/5-public-speaking-tips-ted-gives-its-speakers/&refURL=&referrer=#5c07a8221d9b
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
Everyone is in agreement that ChatGPT (and other generative AI tools) will shape the future of work. Yet there is little consensus on exactly how, when, and to what extent this technology will change our world.
Businesses that extract maximum value from ChatGPT will use it as a collaborative tool for everything from brainstorming to technical maintenance.
For individuals, now is the time to pinpoint the skills the future professional will need to thrive in the AI age.
Check out this presentation to understand what ChatGPT is, how it will shape the future of work, and how you can prepare to take advantage.
The document provides career advice for getting into the tech field, including:
- Doing projects and internships in college to build a portfolio.
- Learning about different roles and technologies through industry research.
- Contributing to open source projects to build experience and network.
- Developing a personal brand through a website and social media presence.
- Networking through events, communities, and finding a mentor.
- Practicing interviews through mock interviews and whiteboarding coding questions.
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
1. Core updates from Google periodically change how its algorithms assess and rank websites and pages. This can impact rankings through shifts in user intent, site quality issues being caught up to, world events influencing queries, and overhauls to search like the E-A-T framework.
2. There are many possible user intents beyond just transactional, navigational and informational. Identifying intent shifts is important during core updates. Sites may need to optimize for new intents through different content types and sections.
3. Responding effectively to core updates requires analyzing "before and after" data to understand changes, identifying new intents or page types, and ensuring content matches appropriate intents across video, images, knowledge graphs and more.
A brief introduction to DataScience with explaining of the concepts, algorithms, machine learning, supervised and unsupervised learning, clustering, statistics, data preprocessing, real-world applications etc.
It's part of a Data Science Corner Campaign where I will be discussing the fundamentals of DataScience, AIML, Statistics etc.
Time Management & Productivity - Best PracticesVit Horky
Here's my presentation on by proven best practices how to manage your work time effectively and how to improve your productivity. It includes practical tips and how to use tools such as Slack, Google Apps, Hubspot, Google Calendar, Gmail and others.
The six step guide to practical project managementMindGenius
The six step guide to practical project management
If you think managing projects is too difficult, think again.
We’ve stripped back project management processes to the
basics – to make it quicker and easier, without sacrificing
the vital ingredients for success.
“If you’re looking for some real-world guidance, then The Six Step Guide to Practical Project Management will help.”
Dr Andrew Makar, Tactical Project Management
2. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
gerfignaedytebfodavegmiguelvilata
araquemario almacbe frankey90 driera_comraulo79
3. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
wolfwolker JL_Laso
araquemario almacbe frankey90 driera_comraulo79
gerfignaedytebfodavegmiguelvilata
paolacaracola
4. BEST PRACTICES FOR REUSABLE
BUNDLES
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
14. Commands → Command/
Controllers → Controller/
Service Container Extensions → DependencyInjection/
Model classes → Model/
Configuration → Resources/config/
Web Resources (CSS, JS, images) → Resources/public/
Translation files → Resources/translations/
Templates → Resources/views/
Unit and Functional Tests → Tests/
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
ESTRUCTURA DE LOS DIRECTORIOS:
15. ¿Cómo se tiene que llamar la carpeta
donde estén los Listeners y/o
Subscribers?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
17. El directorio de un bundle es de solo
lectura
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
18. Y si tu bundle necesita generar algún
fichero, ¿dónde lo crearías?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
19. Solo si formarán parte del repositorio...
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
20. app/logs o app/cache
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
32. PHPUnit
Tests/
Los test funcionales solo deben testear la response y la
información de profiling si creas alguna.
No puede existir un test que sea AllTest.php
Tiene que haber un phpunit.xml.dist
TESTS
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
33. ¿Cuánto % de cobertura tiene que
haber?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
34. >= 95%
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
37. INSTRUCCIONES DE INSTALACIÓN
README.md
Step 1: Download the Bundle
---------------------------
composer require blabla/blabla
Step 2: Enable the Bundle
-------------------------
Step 3, Step 4, etc. otros requisitos como registrar rutas...
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
46. ¿Nombre del dominio de las
traducciones para AcmeBlogBundle?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
48. Un bundle NO tiene que sobreescribir
otros dominios de traducción
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
49. Un bundle NO tiene que sobreescribir
otros dominios de traducción
Symfony Best Practices
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
60. ¿Qué implicaciones tiene estar en la
versión 0.x.x?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
61. “4 - Major version zero (0.y.z) is for initial
development. Anything may change at
any time. The public API should not be
considered stable.”
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
65. ¿Qué hacemos con los servicios que no
son usados por la aplicación si no
internamente en el bundle?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
67. ¿Qué implica que un servicio sea
privado?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
68. No se puede hacer: $container->get('foo');
Solo se puede inyectar en otro servicio en su definición.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
69. ¿Cómo vamos hasta aquí? ¿bien?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
70. MECANISMOS DE SOBRE-
ESCRITURA Y HERENCIA
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
74. ¿Qué implica esto?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
75. Poder sobreescribir casi cualquier
archivo del bundle padre creándolo en
el mismo sitio que el padre.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
78. Controladores
// src/UserBundle/Controller/RegistrationController.php
namespace UserBundleController;
use FOSUserBundleControllerRegistrationController as BaseController;
class RegistrationController extends BaseController
{
public function registerAction()
{
$response = parent::registerAction();
// ... do custom stuff
return $response;
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
79. Controladores
// src/UserBundle/Controller/RegistrationController.php
namespace UserBundleController;
use FOSUserBundleControllerRegistrationController as BaseController;
class RegistrationController extends BaseController
{
public function registerAction()
{
$response = parent::registerAction();
// ... do custom stuff
return $response;
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
80. ¿Siempre que una ruta apunte a ese
action de ese controlador se llamará al
sobreescrito?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
81. route_id:
path: /register
defaults: { _controller: FOSUserBundle:Registration:register }
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
82. ¿De qué otra forma se puede hacer
referencia a un controlador?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
84. route_id:
path: /register
defaults: { _controller:
UserBundleControllerRegistrationController::registerAction }
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
85. ¿y otra forma?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
86. ¿se podría declarar como servicio un
controlador?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
88. route_id:
path: /register
defaults: { _controller: fos_user.registration_controller:registerAction }
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
89. route_id:
path: /register
defaults: { _controller: fos_user.registration_controller:registerAction }
Sí, pero de otra forma. Más adelante!
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
90. Por tanto, solo se sobreescribirá si se
usa ¿cómo?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
98. Orden de búsqueda
1. app/Resources/AcmeBlogBundle/views/layout.html.twig
2. src/Acme/BlogBundle/Resources/views/layout.html.twig
3. src/MyAcmeBlogBundle/Resources/views/layout.html.twig
- si fuera un bundle de vendors que hemos sobreescrito.
public function Bundle::getParent ( return ‘AcmeBlogBundle’; )
4. vendor/Acme/src/BlogBundle/Resources/views/layout.html.twig
- si fuera un bundle de vendors.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
99. ¿Qué dice Symfony Best Practices sobre
dónde tienen que ir los templates del
proyecto?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
103. “Routing is never automatically imported in
Symfony. If you want to include the routes from
any bundle, then they must be manually
imported from somewhere in your application
(e.g. app/config/routing.yml).”
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
104. “Routing is never automatically imported in
Symfony. If you want to include the routes from
any bundle, then they must be manually
imported from somewhere in your application
(e.g. app/config/routing.yml).”
Symfony Best Practices
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
105. “Copiar” las rutas del bundle y solo
importar y/o modificar las que se
deseen.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
114. La sobreescritura de traducciones
está relacionado con el dominio y no
con el bundle
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
115. WHAT?!
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
116. “The last translation file always wins...”
“Translation files are also not aware of
bundle inheritance...”
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
117. WTF?!
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
121. Grupos de validación
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
122. Grupo de Validación
class User implements UserInterface
{
/**
*
@AssertEmail(groups={"registration"})
*/
private $email;
/**
*
@AssertNotBlank(groups={"registration"})
* @AssertLength(min=7,
groups={"registration"})
*/
private $password;
/**
* @AssertValid()
*
@ORMOneToOne(targetEntity="Address"
, mappedBy="address")
*/
private $address;
/**
* @AssertLength(min=2)
*/
private $city;
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
123. class User implements UserInterface
{
/**
*
@AssertEmail(groups={"registration"})
*/
private $email;
/**
*
@AssertNotBlank(groups={"registration"})
* @AssertLength(min=7,
groups={"registration"})
*/
private $password;
/**
* @AssertValid()
*
@ORMOneToOne(targetEntity="Address"
, mappedBy="address")
*/
private $address;
/**
* @AssertLength(min=2)
*/
private $city;
}
Grupo de Validación
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
124. ¿y cómo sobreescribimos las
validaciones?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
125. “Symfony loads all validation
configuration files from every bundle and
combines them into one validation
metadata tree. This means you are able
to add new constraints to a property, but
you cannot override them.”
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
126. “To override this, the 3rd party bundle
needs to have configuration for validation
groups.”
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
127. Y…?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
130. $form = $this->createFormBuilder($users, array(
'validation_groups' => array('Registration', 'Default'),
))->add(...);
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
131. $errors = $validator
->validate($author, null, array('Registration', 'Default'));
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
135. 2ª Sobreescribiendo el servicio creando
otro con el mismo id
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
136. 2ª Sobreescribiendo el servicio creando
otro con el mismo id
Muy mala práctica
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
137. 3ª Usando CompilerPass
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
138. ¿Qué es un CompilerPass?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
139. Es el modo en que Symfony2 permite
interactuar con los servicio y parámetros
definidos globalmente y en los bundles
cuando han sido cargados, pero antes
de que se hayan compilado y
optimizados en el DependencyInjection
Component (DIC)
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
141. // src/Acme/DemoBundle/DependencyInjection/Compiler/OverrideServiceCompilerPass.php
namespace AcmeDemoBundleDependencyInjectionCompiler;
use SymfonyComponentDependencyInjectionCompilerCompilerPassInterface;
use SymfonyComponentDependencyInjectionContainerBuilder;
class OverrideServiceCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$definition = $container->getDefinition('original-service-id');
$definition->setClass('AcmeDemoBundleYourService');
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
146. Herencia de Forms
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
147. class GenderType extends AbstractType
{
...
public function getParent()
{
return ChoiceType::class;
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
148. ¿Si queremos que un nuevo formulario
entre dentro del comportamiento del
bundle con alguna nueva funcionalidad?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
149. El bundle tiene que proveer esa “lógica”
y permitir su configuración
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
150. ¿Cómo?
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
164. Due to the way Doctrine works, it is not
possible to override entity mapping of a
bundle. However, if a bundle provides a
mapped superclass (such as the User entity
in the FOSUserBundle) one can override
attributes and associations. Learn more
about this feature and its limitations in the
Doctrine documentation.
http://symfony.com/doc/current/cookbook/bundles/override.html#entities-entity-mapping
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
172. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
XML:
<field name="name" type="string" length=100 />
173. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
YML:
fields:
name:
type: string
length: 100
174. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
PHP:
$classMetadata ->mapField(array(
'fieldName' => 'slug',
'type' => 'string',
'nullable' => true
));
175. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Annotations:
/**
* @ORMColumn(type="string", length=100)
*/
protected $name;
177. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Automapping:
Busca información de mapeo:
● 1º ./Resources/config/doctrine/entityname. [xml | yml | php]
● 2º Annotation en ./Entity
178. En un bundle no se pueden mezclar
formatos
(annotation, xml, yml)
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
179. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Automapping:
Funciona sólo si tengo una única
conexión a BD
180. # Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
orm:
auto_generate_proxy_classes: "%kernel.debug%"
default_entity_manager: default
entity_managers:
default:
auto_mapping: true
mappings:
AppBundle:
type: xml
dir: SomeResources/config/doctrine
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
http://symfony.com/doc/current/reference/configuration/doctrine.html
182. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Mapped Superclass:
No es una entidad, pero participa de alguna manera en el
árbol de herencia de clases
183. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Mapped Superclass:
Su objetivo es definir información de mapeo que van a
heredar otras entidades
184. CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Mapped Superclass:
<mapped-superclass name="FOSUserBundleEntityUser">
<field name="username" column="username" type="string" length="255" />
….
185. Table Inheritance
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Herencia de clases reflejada en base de datos
186. 1 - Single Table Inheritance
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/**
* @Entity
*/
class Employee extends Person
{
// ...
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
187. 1 - Single Table Inheritance
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/**
* @Entity
*/
class Employee extends Person
{
// ...
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
188. 1 - Single Table Inheritance
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/**
* @Entity
*/
class Employee extends Person
{
// ...
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
CUIDADO CON LOS CAMPOS NO NULLABLES
189. 2 - Class Table Inheritance
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/**
* @Entity
*/
class Employee extends Person
{
// ...
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
190. 2 - Class Table Inheritance
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/**
* @Entity
*/
class Employee extends Person
{
// ...
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
191. 2 - Class Table Inheritance
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/**
* @Entity
*/
class Employee extends Person
{
// ...
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
PERFORMANCE IMPACT
193. Bind mapping files and classes
#AcmeMyBundle.php
private function buildMappingCompilerPass ()
{
$arguments = array(
array( realpath (__DIR__ . '/Resources/config/doctrine-base' )),
'.orm.xml'
);
$locator = new Definition ('DoctrineCommonPersistenceMappingDriverDefaultFileLocator' , $arguments );
$driver = new Definition ('DoctrineORMMappingDriverXmlDriver' , array( $locator ));
return new DoctrineOrmMappingsPass ($driver, array(
'FullNamespace'
) , array(
'your_bundle.manager_name'
) , 'your_bundle.orm_enabled' );
}
How to Provide Model Classes for several Doctrine Implementations (link)
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
194. Bind mapping files and classes
#AcmeMyBundle.php
private function buildMappingCompilerPass ()
{
$arguments = array(
array( realpath (__DIR__ . '/Resources/config/doctrine-base' )),
'.orm.xml'
);
$locator = new Definition ('DoctrineCommonPersistenceMappingDriverDefaultFileLocator' , $arguments );
$driver = new Definition ('DoctrineORMMappingDriverXmlDriver' , array( $locator ));
return new DoctrineOrmMappingsPass ($driver, array(
'FullNamespace'
) , array(
'your_bundle.manager_name'
) , 'your_bundle.orm_enabled' );
}
How to Provide Model Classes for several Doctrine Implementations (link)
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
195. loadClassMetadata event
# Acme/MyBundle/EventLister/MyMapper.php
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
{
$classMetadata = $eventArgs->getClassMetadata();
if (null === $classMetadata->reflClass) {
return;
}
if ($this->isTimestampable($classMetadata)) {
if ($this->getClassAnalyzer()->hasMethod($classMetadata->reflClass, 'updateTimestamps')) {
$classMetadata->addLifecycleCallback('updateTimestamps', Events::prePersist);
$classMetadata->addLifecycleCallback('updateTimestamps', Events::preUpdate);
}
foreach (array('createdAt', 'updatedAt') as $field) {
if (!$classMetadata->hasField($field)) {
$classMetadata->mapField(array(
'fieldName' => $field,
'type' => $this->dbFieldType,
'nullable' => true
));
}
}
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
196. loadClassMetadata event
# Acme/MyBundle/EventLister/MyMapper.php
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
{
$classMetadata = $eventArgs->getClassMetadata();
if (null === $classMetadata->reflClass) {
return;
}
if ($this->isTimestampable($classMetadata)) {
if ($this->getClassAnalyzer()->hasMethod($classMetadata->reflClass, 'updateTimestamps')) {
$classMetadata->addLifecycleCallback('updateTimestamps', Events::prePersist);
$classMetadata->addLifecycleCallback('updateTimestamps', Events::preUpdate);
}
foreach (array('createdAt', 'updatedAt') as $field) {
if (!$classMetadata->hasField($field)) {
$classMetadata->mapField(array(
'fieldName' => $field,
'type' => $this->dbFieldType,
'nullable' => true
));
}
}
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
197. Sonata Doctrine Collector (EasyExtendsBundle)
/**
* @param array $config
*
* @throws Exception
*/
protected function addDoctrineDiscriminators(array $config)
{
$collector = DoctrineCollector::getInstance();
$purchasableClass = 'ReusableBundleEntityAbstractsAbstractPurchasable';
$collector->addDiscriminator($purchasableClass, 'PRODUCT', $config['class']['product']);
$types = $config['class']['purchasable_mapping'];
foreach ($types as $type) {
list($key, $class) = array_values($type);
if (!class_exists($class)) {
throw new Exception(sprintf('Class %s not found', $class));
}
//Add custom type
$collector->addDiscriminator($purchasableClass, $key, $class);
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
198. Sonata Doctrine Collector (EasyExtendsBundle)
/**
* @param array $config
*
* @throws Exception
*/
protected function addDoctrineDiscriminators(array $config)
{
$collector = DoctrineCollector::getInstance();
$purchasableClass = 'ReusableBundleEntityAbstractsAbstractPurchasable';
$collector->addDiscriminator($purchasableClass, 'PRODUCT', $config['class']['product']);
$types = $config['class']['purchasable_mapping'];
foreach ($types as $type) {
list($key, $class) = array_values($type);
if (!class_exists($class)) {
throw new Exception(sprintf('Class %s not found', $class));
}
//Add custom type
$collector->addDiscriminator($purchasableClass, $key, $class);
}
}
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
199. Relationships with abstract
classes and interfaces
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"...>
<mapped-superclass name="ReusableBundleEntityAbstractsAbstractCartLine">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="quantity" column="quantity" type="integer" nullable="false" />
<many-to-one target-entity="ReusableBundleEntityAbstractsAbstractPurchasable"
field="purchasable" />
<many-to-one target-entity="ReusableBundleModelInterfacesCartInterface"
inversed-by="cartLines" field="cart" />
</mapped-superclass>
</doctrine-mapping>
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
200. Relationships with abstract
classes and interfaces
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"...>
<mapped-superclass name="ReusableBundleEntityAbstractsAbstractCartLine">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="quantity" column="quantity" type="integer" nullable="false" />
<many-to-one target-entity="ReusableBundleEntityAbstractsAbstractPurchasable"
field="purchasable" />
<many-to-one target-entity="ReusableBundleModelInterfacesCartInterface"
inversed-by="cartLines" field="cart" />
</mapped-superclass>
</doctrine-mapping>
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
201. Relationships with abstract
classes and interfaces
# app/config/config.yml
doctrine:
# ...
orm:
# ...
resolve_target_entities:
AcmeReusableBundleModelInterfacesCartInterface: AcmeAppBundleEntityCart
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
204. FOSUserBundle
Sonata * Bundle
The bundle provides base classes which are already mapped for most fields to make it easier to
create your entity. Here is how you use it:
1. Extend the base User class
2. Map the id field. It must be protected as it is inherited from the parent class.
When you extend from the mapped superclass provided by the bundle, don't redefine the mapping
for the other fields as it is provided by the bundle.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
205. FOSUserBundle
Sonata * Bundle
The bundle provides base classes which are already mapped for most fields to make it easier to
create your entity. Here is how you use it:
1. Extend the base User class
2. Map the id field. It must be protected as it is inherited from the parent class.
When you extend from the mapped superclass provided by the bundle, don't redefine the mapping
for the other fields as it is provided by the bundle.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
206. FOSUserBundle
Sonata * Bundle
The bundle provides base classes which are already mapped for most fields to make it easier to
create your entity. Here is how you use it:
1. Extend the base User class
2. Map the id field. It must be protected as it is inherited from the parent class.
When you extend from the mapped superclass provided by the bundle, don't redefine the mapping
for the other fields as it is provided by the bundle.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
207. FOSUserBundle
Sonata * Bundle
The bundle provides base classes which are already mapped for most fields to make it easier to
create your entity. Here is how you use it:
1. Extend the base User class
2. Map the id field. It must be protected as it is inherited from the parent class.
When you extend from the mapped superclass provided by the bundle, don't redefine the mapping
for the other fields as it is provided by the bundle.
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
208. FOSUserBundle
Sonata * Bundle
FOSUser no crea las relaciones entre
User - Group
Las deja del lado del cliente
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
210. simple shopping cart
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Cart
- user
- createdAt
- ...
CartLine
- cart
- purchasable
- quantity
- ...
Purchasable
- name
- price
- ...
Product
- media
- size
- ...
Ticket
- date
- ...
Book
- isbn
- ...
DeliverableTrait
- width
- height
- weight
211. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Declarar clases abstractas y
mapearlas como mapped-super-class
212. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Declarar una interfaz para cada clase
213. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Heredar de la clase abstracta
evitando auto-mapping
214. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Hacer configurable
acme_reusable:
class:
product: AppBundleEntityProduct
cart: ...
cart_line: ...
purchasables:
ticket: { key: TICKET, class: AppBundleEntityTickets }
book: { key: BOOK, class: AppBundleEntityBook }
215. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Hacer configurable
acme_reusable:
class:
product: AppBundleEntityProduct
cart: ...
cart_line: ...
purchasables:
ticket: { key: TICKET, class: AppBundleEntityTickets }
book: { key: BOOK, class: AppBundleEntityBook }
216. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
Hacer configurable
acme_reusable:
class:
product: AppBundleEntityProduct
cart: ...
cart_line: ...
purchasables:
ticket: { key: TICKET, class: AppBundleEntityTickets }
book: { key: BOOK, class: AppBundleEntityBook }
217. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
// AcmeReusableExtension.php
protected function setConfiguration(ContainerBuilder $container, $config)
{
$container->setParameter('acme_reusable.model_manager_name', $config['model_manager_name']);
$container->setParameter('acme_reusable.orm_enabled', $config['orm_enabled']);
$this->configureClass($container, $config);
}
218. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$treeBuilder->root('acme_reusable')
->children()
->arrayNode('class')
->children()
->scalarNode('product')->cannotBeEmpty()->defaultValue(self::PRODUCT_CLASS)->end()
->scalarNode('cart')->cannotBeEmpty()->defaultValue(self::CART_CLASS)->end()
….
->arrayNode('purchasable_mapping')
->prototype('array')
->children()
->scalarNode('key')->end()
->scalarNode('class')->end()
->end()
->end()
->end()
->end()
->end()
->end()
->end();
return $treeBuilder;
}
219. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
// AcmeReusableBundle.php
private function buildOrmCompilerPass(ContainerBuilder $container)
{
$arguments = array(array(realpath(__DIR__.'/Resources/config/doctrine-model')), '.orm.xml');
$locator = new Definition('DoctrineCommonPersistenceMappingDriverDefaultFileLocator', $arguments);
$driver = new Definition('DoctrineORMMappingDriverXmlDriver', array($locator));
foreach ($this->getContainerExtension()->getEntitiesOverrides() as $configKey => $entity) {
$container->addCompilerPass(
new DoctrineOrmMappingsPass(
$driver,
array("%acme_reusable.$configKey.class%"),
array('acme_reusable.model_manager_name', 'orm'),
"acme_reusable.use_default.$configKey"
)
);
}
}
220. Estrategia
CÓMO CREAR THIRD PARTY BUNDLES DE SYMFONY COMPLETAMENTE EXTENSIBLES Y SOBREESCRIBIBLES
// AcmeReusableBundle.php
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
{
$this->classMetadata = $eventArgs->getClassMetadata();
$classMetadata = $this->classMetadata;
if ($classMetadata->reflClass === $this->cartClass) {
$classMetadata->mapOneToMany(array(
'fieldName' => 'cartLines',
'targetEntity' => $this->cartLineClass,
'cascade' => array(
1 => 'all',
),
'mappedBy' => 'cart',
'orphanRemoval' => true,
));
}
}