1666346472
The new industrial age has made engineering a diverse field of study, with many specialties emerging as technology advances. With over one million engineers graduating each year, the industry is under pressure to create jobs. But technology is proving to be the best way out of this situation, creating thousands of jobs in new areas such as IoT, data science, machine learning, and app development. To fill these gaps, students are looking for the best engineering courses in India that will equip them with the right skills suitable for the industry.
We offer many specializations ranging from civil engineering to mechanical, and electronic engineering, and more. The list goes on and on, but it's true that not all majors offer the same career opportunities. Some courses are currently in high demand but may decline in the coming years.
There are many different areas of engineering. Each industry has its own capabilities and scope. However, you should choose something that interests you with passion. For your help I am enlisting some branches of engineering:
Computer Science Engineering
Computer Science and Engineering is about hardware and software development and integrates the fields of electrical engineering and computer science in a fascinating way. The industry's explosive boom over the past decade has also brought about a commendable increase in opportunities and salary ranges. Among the best engineering majors, computer science and engineering often rank among students from reputable companies. Amazon, LinkedIn, IBM, TCS, Adobe, NXP Technologies, Samsung R&D, Kraftly, and others are companies that employ computer scientists.
Automation and robotics
Robots are becoming an increasingly important factor for most manufacturing and manufacturing companies. Recently, there has been an increase in research into how robots work and how they can be used. Robotics is a fast-growing field, brimming with opportunities for engineering students with good attitudes and creativity.
Petroleum Engineering
The petroleum industry offers the highest-paid jobs. The refineries recruit chemical engineers and they earn pretty well there. But entry into the refineries is not easy. You get placed in the refineries either through campus drives or through the gate. This is why petroleum engineers are among the highest-paid engineers in the world. 2 years of experience can earn INR 3-5 lakh and with about 10 years of experience he can earn INR 18-40 lakh.
Aeronautical Engineering
Aeronautics is the talk of the town for years, and research and development in the area have given a face to the career in this branch. Aeronautical engineers are considered the highest-paid engineers in the industry and are experts in the design and development of aerospace vehicles. In addition, training provides career profiles for Mechanical Designers, Aircraft Structural Engineers, Aerospace Designers, Consultants, and Graduate Engineers.
Mechanical Engineering
eat a combination of all engineering skills and tops the list of best engineering courses. B.Tech Mechatronics and B.Tech Mechanical Engineering selected the highest in recent years. Mechanical engineers can find employment in government agencies such as Railways, SAIL, Metro Project, and BHEL, and private organizations such as TATA Motors, BAJAJ, Honda, ISRO, COAL INDIA, NAVY, Ford, Design Tech System Ltd.
Civil Engineering
Another recognized field of engineering is civil engineering— it involves planning, designing, constructing, and supervising infrastructures. It helps in the facilitation of highways and bridges, hospitals, sewage, and other buildings. This industry is set to grow to USD 11.72 Trillion by 2025 according to a market research study. The duration of the course is for 4-5 years.
Chemical Engineering
The Chemical Engineers requirement is more like this engineering course in the hype. The chances of getting a highly-paid Chemical Engineer job in India and foreign countries are comparatively high. The approximate highest salary package of a Chemical engineer is ₹20 Lakhs Per Annum which might increase.
Biomedical Engineering
The biomedical engineering courses in India are an amalgamation of two principles (engineering and medical science) making it one exclusive elite course. A biomedical engineer has a big part to play in stabilizing the healthcare system. The Aspirants aim at a holistic education in mathematics, science, biology, and medicine.
Biotech Engineering
The biotechnology sector in India is growing exponentially, expected to grow at a CAGR of 30.46 by 2025. India is one of the world's leading biotech destinations and offers a range of opportunities for biotech engineers. Applicants can choose a biotechnology specialization such as Immunology, Biostatistics, Ecology, Virology, Genetics, Microbiology, and Animal Husbandry. Biotechnology engineers find employment in animal husbandry, agriculture, disease research, environmental protection, drug development, fertilizer, and pesticide development.
As you can select from the above, according to your passion. There are many universities which are providing this course but It will be advisable if you do your degree from a well-known university that provides prime placement opportunities, prime career options outstanding exposure and professional enhancement training, and lots of projects.
Here are the Best Private Universities in India list where you can apply for admission:
Manipal Academy of Higher Education
Birla Institute of Technology & Science Pilani
Dr. D. Y. Patil Vidyapeeth Pune
Madurai Kamaraj University Madurai
Bharati Vidyapeeth Deemed University Pune
Manonmaniam Sundaranar University Tirunelveli
Birla Institute of Technology Ranchi
1647351133
Minimum educational required – 10+2 passed in any stream from a recognized board.
The age limit is 18 to 25 years. It may differ from one airline to another!
Physical and Medical standards –
You can become an air hostess if you meet certain criteria, such as a minimum educational level, an age limit, language ability, and physical characteristics.
As can be seen from the preceding information, a 10+2 pass is the minimal educational need for becoming an air hostess in India. So, if you have a 10+2 certificate from a recognized board, you are qualified to apply for an interview for air hostess positions!
You can still apply for this job if you have a higher qualification (such as a Bachelor's or Master's Degree).
So That I may recommend, joining Special Personality development courses, a learning gallery that offers aviation industry courses by AEROFLY INTERNATIONAL AVIATION ACADEMY in CHANDIGARH. They provide extra sessions included in the course and conduct the entire course in 6 months covering all topics at an affordable pricing structure. They pay particular attention to each and every aspirant and prepare them according to airline criteria. So be a part of it and give your aspirations So be a part of it and give your aspirations wings.
Read More: Safety and Emergency Procedures of Aviation || Operations of Travel and Hospitality Management || Intellectual Language and Interview Training || Premiere Coaching For Retail and Mass Communication || Introductory Cosmetology and Tress Styling || Aircraft Ground Personnel Competent Course
For more information:
Visit us at: https://aerofly.co.in
Phone : wa.me//+919988887551
Address: Aerofly International Aviation Academy, SCO 68, 4th Floor, Sector 17-D, Chandigarh, Pin 160017
Email: info@aerofly.co.in
#air hostess institute in Delhi,
#air hostess institute in Chandigarh,
#air hostess institute near me,
#best air hostess institute in India,
#air hostess institute,
#best air hostess institute in Delhi,
#air hostess institute in India,
#best air hostess institute in India,
#air hostess training institute fees,
#top 10 air hostess training institute in India,
#government air hostess training institute in India,
#best air hostess training institute in the world,
#air hostess training institute fees,
#cabin crew course fees,
#cabin crew course duration and fees,
#best cabin crew training institute in Delhi,
#cabin crew courses after 12th,
#best cabin crew training institute in Delhi,
#cabin crew training institute in Delhi,
#cabin crew training institute in India,
#cabin crew training institute near me,
#best cabin crew training institute in India,
#best cabin crew training institute in Delhi,
#best cabin crew training institute in the world,
#government cabin crew training institute
1609507876
The demand for digital marketing is increasing. This in turn is increasing the demand for digital marketing experts in India. There are many digital marketers in India.
This blog post lists the best 25 digital marketing experts in India who have outstanding work in the digital marketing field.
But, according to the 25** best digital marketing experts**, there exists a simple way to find out what is working in this market.
Today, I do not think any business can survive without digital marketing. You know that digital marketing talent is rare. You should check the results of our digital marketing talent survey. Here, we have compiled a list of 25 best digital marketers in India.
1. SEO Vaibhav Sharma
Vaibhav Sharma (Born 28-07-1998), better known as SEO Vaibhav Sharma, Youngest Digital Marketing Expert and Blogger and youtube personality since 2017. Work As Freelancer SEO Expert | SMO Expert | PPC Expert. He Is Also Known for his hard & Smart work in the Digital Marketing Industry.
They served their digital marketing services for international and also domestic clients and they all are happy with them.
Vaibhav Sharma is Google Certified Digital Marketer and he helps businesses to achieve their goals.
Experties In: Local SEO, Lead Generation, Branding, etc…
You can contact Vaibhav Sharma through mail: vaibhavsharmaseo@gmail.com
Website: https://seovaibhavsharma.com
2. Sorav Jain
After embarking on the SEO journey in his early 17s, Sorav Jain made significant contributions to the digital marketing industry. He is the CEO of Echo, a self-funded firm that provides world-class social media and digital marketing expertise.
Website: https://www.soravjain.com/
3. Mridul Kabra
By graduating as an architect, he is the first student of Malaviya National Institute of Technology to become a teacher and digital marketing expert. He is also working as google certified Digital Marketer expertise in lead generation.
4. Jitendra Vaswani
Jitendra Vaswani is a professional digital marketer and blogger, currently based out of India. His blog, BloggersIdeas, is one of the top ranking blogs on blogging and digital marketing in the country. He is also a top digital marketing consultant in India, a public speaker and has spoken at events, colleges and forums in India, blogging, personal branding and keynote making online.
5. Prateek Shah
Prateek is a best digital marketing trainer with Google India and head trainer of AIMA (All India Management Association). Apart from managing social media campaigns for various brands, he launched India’s first student social network ‘Asset Ambassador’.
He founded Digital Defined in October 2015, with the aim of creating a platform for digital marketing professionals and enthusiasts. It is a digital marketing hub for communicating, contributing and collaborating digital marketing ideas and receiving all marketing questions.
6. Deepak Kanakaraju
Deepak Kanakaraju is famous in the world of digital marketing as Digital Deepak. His blog digitaldeepak.com is an amazing resource for those who want to learn digital marketing.
Deepak loves bikes and started a blog on a motorcycle called BikeAdvice which got more than 1 lakh followers and 1 million plus page views per month. This was his debut in digital marketing.
Following this bike blog, Deepak worked in several companies and also spoke on digital marketing. The blog DigitalDeepak.com has been ranked as one of the top 10 digital marketing blogs in India.
7. Pradeep Chopra
Pradeep Chopra is an IIT Delhi pass out. He is one of the pioneers of digital marketing in India. Pradeep is the co-founder and CEO of Digital Vidya. He is an author on International Fence and Digital Marketing and Entrepreneurship.
Pradeep has organized several social media workshops in India at Singapore, Click Asia Summit, Tycon, Global Youth Marketing Force and NASSCOM India Leadership Force.
He has trained and mentored thousands of professionals and CEOs in digital marketing. Pradeep believes “Internet connectivity is more important than water supply”
8. Ankit Malik
Over 7 years of agency and in-house experience in digital marketing. Ankit Malik is capable of managing and executing projects of any size and budget. Ankit Malik owns brands like HBO India, Yatra, Lufthansa, Mercedes, Intel and many more. Ankit Malik is considered the best in the social media industry and was also nominated in the top 30 under 30 social media and brand markets in 2018. Ankit has previously worked with MRM MCCAN and India’s most luxury hospital Roswalk Healthcare. His expertise lies in the medical and entertainment section. Ankit also won the ‘Top 200 Movie Blogs 2018’ awarded by FeedSpot and is currently working with renowned brands in India and Canada.
9. Ananthanarayanan V
PGCPM from Indian Institute of Management in Indore in 2007. Also awarded the “Best Digital Advertising Professionals in India” from the CMO Council and World Advertising Congress from the fourth edition of “50 Best Digital Marketing Professionals, 2014” at the “Mobile and Digital Marketing Summit 2014” held at TAJ Scandal END, MUMBAI . 14 November 2014. The theme of the summit is “Real-time through mobile and digital media: real-time marketing and engagement”. Organization: He is the founder and CEO of TechDivine Creative Services based in Thane West, Mumbai, Maharashtra, India.
10. Himanshu Arora
The co-founder of Socialpanga, Himanshu Arora, believes in deep electronic marketing. Being an expert in designing, strategizing and implementing electronic marketing through various strategies and campaigns, he represents himself as a ‘marketing mafia’. He has worked with around 50 firms, including Coca-Cola, SAP, Google, Accenture, Horricks, and more. In addition, he has been selected as the Google Award for Google Product and Sales Award. Himanshu is a renowned speaker and has conducted more than 35 electronic advertising and marketing training sessions for notable firms such as Kodak, Nokia, Wipro, and many more.
11. Aditya Gupta
In 2011, he founded Social Samosa with Ankitagba. His plan was to become a hub for the Indian social media industry by satisfying all earlier knowledge gaps. In 2015, it was sold to confidential investors for an undisclosed sum. According to an ET report, a group of investors bought the company for Rs.2-3 Cr. Now, Ankit works at his digital communications agency Igenero. He founded the company in 2009 with the objective of providing solutions for branding, web-based products and digital strategy on one platform. He has worked with well-known companies.
12. Jainendra singh
He is a Google certified digital marketer in india. His extensive experience in strategic planning and business structure has helped billions of dollars of companies in many industries. For so many years, they have been occupied in measuring the ROI of digital media activities, lead generation and content delivery through popular social and bookmark channels.
13. Laxmipati bhat
With 25 years of experience in the world of marketing, he blends traditional advertising methods and new digital information in a great way. Currently, he is the head of business communications for Robosoft Technologies, a leading mobility solutions partner. He worked with a successful track record in business development in Mumbai, Bangladesh, Sri Lanka and Bangalore with demand for FMCG and service brands and leadership agency profit centers. He worked with P&G, BAT, GSK, Sara Lee, Wipro Consumer Care & Lighting and ITC Foods.
14. Prashant Naidu
Moving on to start LI with his wife, Prashant worked as a business analyst in Singapore, India and the UK for six years.
Prashant Naidu is the founder of a four-and-a-half-year-old young online publishing start-up that covers social media marketing stories beyond press releases. LI has been listed in the Top 10 Social Media Blogs 2013 by Social Media Examiner and Indi Blogger. They believe that high quality content always stays and pays
15. Rajat Jain
Rajat Jain is the founder and CEO of “Shoot Order”, a top-ranked digital marketing company with over 200 customers worldwide. Along with this, he is also considered as the best digital marketing consultant in India. Rajat also writes a blog called “SpeakRJ”, where he shares his marketing experiences and latest developments in the market.
16. Harsh Agarwal
Harsh Agarwal is a B.tech graduate and professional blogger. He has also worked at Convergys before becoming a full-time blogger. His blog “ShoutMeLoud” is a one-stop solution for every aspiring blogger out there. Blogging is a very important and important aspect of Digital Marketing. His expertise in blogging and contribution in this field is excellent.
17. Kunal Chaudhary
Kunal Chaudhary is the founder of Delhi School of Internet Marketing, a renowned digital marketing institute. He has 8+ years of digital marketing experience and has done internet marketing for top brands like Snapdeal, Myntra, Flipkart, FashionAndieu, Jabong etc. He is also a digital marketing specialist with over $ 2 million earned in revenue.
18. Rohit Onkar
Rohit Onkar is One of the best Digital Marketer, Business Leader and Trainer. Rohit has been able to successfully establish scale processes, manage cross-functional teams, increase the profitability of organizations and drive them to desired goals. He is the Head of Digital at Loylty Rewardz Mngt Pvt Ltd, where his role is to oversee daily digital marketing campaigns, set up large-scale processes, identify new monetization opportunities to create new revenue streams and drive daily campaign execution. Have to manage for. A cross-functional team. .
19. Anoop Mishra
Anoop Mishra is a digital marketing specialist. He is the co-founder of Prachar Mantra. Anoop has done BCA, MCA and MBA (Marketing)
He has helped many businesses do digital marketing effectively and efficiently. You can learn more about them at: https://www.anoopmishra.com
20. Suresh Babu
Suresh Babu is the founder and CEO of Web Marketing Academy. He is one of the best digital marketing trainers in India. Suresh holds an Executive MBA from IIMB.
He started his career as a lecturer for Hotel Management and Catering Science and today he is one of the best teachers of digital marketing.
Suresh is a visiting faculty and president at prominent universities like Christ University, Acharya B-School, Commits College, Manetti Community College. He also founded the online marketing enthusiast community, a community of passionate online marketing enthusiasts.
21. Arockiasamy Satya
This B2B marketing professional has contributed to transform the business through appropriate marketing and content strategy. He demonstrates expertise in the planning, construction, implementation, monitoring and analysis of marketing initiatives. When it comes to content writing, the different times with writing different marketing-related articles are true. The two most important business changes he made were in Brillio and Collabera. In addition, he has teamed up with Dell.
22. Chetan Deshpande
Chetan Deshpande is the CEO of Next Level Marketers. Next Level Marketers is a group of experts that takes your marketing and business development to the next level.
He has more than 10 years of experience in digital marketing and is a specialist in implementing and executing inbound marketing. Chetan is very active in the field of digital marketing and has also received many media coverage.
23. Prabhakar Alok
This youngest entrepreneur from Bihar, India, is a digital marketing expert and famous for trends in his city. Prabhakar Alok is the founder of 3 start-ups - DigiwaleBabu, My22yards and DigitalGucucool. Through this, he renders digital marketing services for start-ups across India. DigiwaleBabu is a marketing tool box that provides best-in-class services to its customers in all aspects of online marketing. Apart from being a Google certified digital marketer in India, Prabhakar Alok is a social activist and a star cricketer in his field.
24. Viren Patel
Viren Patel is a co-founder and mentor at Lavenir Institute of Professional Studies.
He has an MBA in Information Management from Somaiya Institute of Management and Research and has 10 years of experience in the web.
His institute Lavenir Institute of Professional Studies is training many people in digital marketing and growing at a great pace.
25. Ashok Lalla
Ashok Lalla is a best digital marketing expert in mumbai. He did his MBA in Marketing from JBIMS, Mumbai.
Ashok was Global Head - Digital Marketing at Infosys from 2012 to 2015. He has worked with many other large companies.
Ashok has a lot of knowledge and expertise in digital marketing. You can learn more about him - www.linkedin.com/in/ashoklalla
This was a list of the best digital marketers in India I was able to come up with.
Digital marketing is a very dynamic field and to specialize in digital marketing, one has to keep himself updated with the latest trends in digital marketing.
In addition, many of the digital marketing experts listed above provide free guidance to digital marketing enthusiasts. Students without any selfishness and helping the digital marketing community are impacting lives not only in India but around the world.
Obviously I have missed a lot of great minds that I do not know, and I am sorry to miss them!
If you know other great marketers in India, I love to know his name and his work in digital marketing. Leave them in the comments below!
#digital marketer #digital marketing expert #digital marketer in india #digital marketing expert in india #best digital marketer in india #best digital marketing expert in india
1667086140
This bundle provides a collection of annotations for Symfony2 Controllers, designed to streamline the creation of certain objects and enable smaller and more concise actions.
By default, all annotations are loaded, but any individual annotation can be completely disabled by setting to false active
parameter.
Default values are:
controller_extra:
resolver_priority: -8
request: current
paginator:
active: true
default_name: paginator
default_page: 1
default_limit_per_page: 10
entity:
active: true
default_name: entity
default_persist: true
default_mapping_fallback: false
default_factory_method: create
default_factory_mapping: true
form:
active: true
default_name: form
object_manager:
active: true
default_name: form
flush:
active: true
default_manager: default
json_response:
active: true
default_status: 200
default_headers: []
log:
active: true
default_level: info
default_execute: pre
ResolverEventListener is subscribed to
kernel.controller
event with priority -8. This element can be configured and customized withresolver_priority
config value. If you need to get ParamConverter entities, make sure that this value is lower than 0. The reason is that this listener must be executed always after ParamConverter one.
Entity provider
In some annotations, you can define an entity by several ways. This chapter is about how you can define them.
You can define an entity using its namespace. A simple new new()
be performed.
/**
* Simple controller method
*
* @SomeAnnotation(
* class = "Mmoreram\CustomBundle\Entity\MyEntity",
* )
*/
public function indexAction()
{
}
You can define an entity using Doctrine shortcut notations. With this format you should ensure that your Entities follow Symfony Bundle standards and your entities are placed under Entity/
folder.
/**
* Simple controller method
*
* @SomeAnnotation(
* class = "MmoreramCustomBundle:MyEntity",
* )
*/
public function indexAction()
{
}
You can define an entity using a simple config parameter. Some projects use parameters to define all entity namespaces (To allow overriding). If you define the entity with a parameter, this bundle will try to instance it with a simple new()
accessing directly to the container ParametersBag.
parameters:
#
# Entities
#
my.bundle.entity.myentity: Mmoreram\CustomBundle\Entity\MyEntity
/**
* Simple controller method
*
* @SomeAnnotation(
* class = "my.bundle.entity.myentity",
* )
*/
public function indexAction()
{
}
Controller annotations
This bundle provide a reduced but useful set of annotations for your controller actions.
Creates a Doctrine Paginator object, given a request and a configuration. This annotation just injects into de controller a new Doctrine\ORM\Tools\Pagination\Pagination
instance ready to be iterated.
You can enable/disable this bundle by overriding active
flag in configuration file config.yml
controller_extra:
pagination:
active: true
By default, if
name
option is not set, the generated object will be placed in a parameter named$paginator
. This behaviour can be configured usingdefault_name
in configuration.
This annotation can be configured with these sections
To create a new Pagination object you need to refer to an existing Entity. You can check all available formats you can define it just reading the Entity Provider section.
<?php
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* )
*/
public function indexAction(Paginator $paginator)
{
}
You need to specify Paginator annotation the page to fetch. By default, if none is specified, this bundle will use the default one defined in configuration. You can override in config.yml
controller_extra:
pagination:
default_page: 1
You can refer to an existing Request attribute using ~value~
format, to any $_GET
element by using format ?field?
or to any $_POST
by using format #field#
You can choose between Master Request or Current Request accessing to its attributes, by configuring the request value of the configuration.
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/{foo}
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* page = "~foo~"
* )
*/
public function indexAction(Paginator $paginator)
{
}
or you can hardcode the page to use.
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* page = 1
* )
*/
public function indexAction(Paginator $paginator)
{
}
You need to specify Paginator annotation the limit to fetch. By default, if none is specified, this bundle will use the default one defined in configuration. You can override in config.yml
controller_extra:
pagination:
default_limit_per_page: 10
You can refer to an existing Request attribute using ~value~
format, to any $_GET
element by using format ?field?
or to any $_POST
by using format #field#
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/{foo}/{limit}
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* page = "~foo~",
* limit = "~limit~"
* )
*/
public function indexAction(Paginator $paginator)
{
}
or you can hardcode the page to use.
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* page = 1,
* limit = 10
* )
*/
public function indexAction(Paginator $paginator)
{
}
You can order your Pagination just defining the fields you want to orderBy and the desired direction. The orderBy
section must be defined as an array of arrays, and each array should contain these positions:
x
)use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* orderBy = {
* {"x", "createdAt", "ASC"},
* {"x", "updatedAt", "DESC"},
* {"x", "id", 1, {
* 0 => "ASC",
* 1 => "DESC",
* }},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
With the third and fourth value you can define a map where to match your own direction nomenclature with DQL one. DQL nomenclature just accept ASC for Ascendant and DESC for Descendant.
This is very useful when you need to match a url format with the DQL one. You can refer to an existing Request attribute using ~value~
format, to any $_GET
element by using format ?field?
or to any $_POST
by using format #field#
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/order/{field}/{direction}
*
* For example, some matchings...
*
* /myroute/paginate/order/id/1 -> ORDER BY id DESC
* /myroute/paginate/order/enabled/0 - ORDER BY enabled ASC
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* orderBy = {
* {"x", "createdAt", "ASC"},
* {"x", "updatedAt", "DESC"},
* {"x", "~field~", ~direction~, {
* 0 => "ASC",
* 1 => "DESC",
* }},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
The order of the definitions will alter the order of the DQL query.
You can define some where statements in your Paginator. The wheres
section must be defined as an array of arrays, and each array should contain these positions:
x
)use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* wheres = {
* {"x", "enabled", "=", true},
* {"x", "age", ">", 18},
* {"x", "name", "LIKE", "Eferv%"},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
You can refer to an existing Request attribute using ~value~
format, to any $_GET
element by using format ?field?
or to any $_POST
by using format #field#
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/{field}
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* wheres = {
* {"x", "name", "LIKE", "~field~"},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
You can use as well this feature for optional filtering by setting the last position to true
. In that case, if the filter value is not found, such line will be ignored.
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /myroute?query=name%
* This Controller matches pattern /myroute as well
*
* In both cases this will work. In the first case we will apply the where line
* in the paginator. In the second case, we wont.
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* wheres = {
* {"x", "name", "LIKE", "?query?", true},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
You can also define some fields to not null. Is same as wheres
section, but specific for NULL assignments. The notNulls
section must be defined as an array of arrays, and each array should contain these positions:
x
)use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* notNulls = {
* {"x", "enabled"},
* {"x", "deleted"},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
You can do some left joins in this section. The leftJoins
section must be defined as an array of array, where each array can have these fields:
x
)use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* leftJoins = {
* {"x", "User", "u", true},
* {"x", "Address", "a", true},
* {"x", "Cart", "c"},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
You can do some inner joins in this section. The innerJoins
section must be defined as an array of array, where each array can have these fields:
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* innerJoins = {
* {"x", "User", "u", true},
* {"x", "Address", "a", true},
* {"x", "Cart", "c"},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
A nice feature of this annotation is that you can also inject into your controller a Mmoreram\ControllerExtraBundle\ValueObject\PaginatorAttributes
instance with some interesting information about your pagination.
To inject this object you need to define the "attributes" annotation field with the method parameter name.
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
use Mmoreram\ControllerExtraBundle\ValueObject\PaginatorAttributes;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/
*
* @CreatePaginator(
* attributes = "paginatorAttributes",
* entityNamespace = "MmoreramCustomBundle:User",
* page = 1,
* limit = 10
* )
*/
public function indexAction(
Paginator $paginator,
PaginatorAttributes $paginatorAttributes
)
{
$currentPage = $paginatorAttributes->getCurrentPage();
$totalElements = $paginatorAttributes->getTotalElements();
$totalPages = $paginatorAttributes->getTotalPages();
$limitPerPage = $paginatorAttributes->getLimitPerPage();
}
This is a completed example and its DQL resolution
use Doctrine\ORM\Tools\Pagination\Pagination;
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
/**
* Simple controller method
*
* This Controller matches pattern /paginate/nb/{limit}/{page}
*
* Where:
*
* * limit = 10
* * page = 1
*
* @CreatePaginator(
* entityNamespace = "ControllerExtraBundle:Fake",
* page = "~page~",
* limit = "~limit~",
* orderBy = {
* { "x", "createdAt", "ASC" },
* { "x", "updatedAt", "DESC" },
* { "x", "id", "0", {
* "1" = "ASC",
* "2" = "DESC",
* }}
* },
* wheres = {
* { "x", "enabled" , "=", true }
* },
* leftJoins = {
* { "x", "relation", "r" },
* { "x", "relation2", "r2" },
* { "x", "relation5", "r5", true },
* },
* innerJoins = {
* { "x", "relation3", "r3" },
* { "x", "relation4", "r4", true },
* },
* notNulls = {
* {"x", "address1"},
* {"x", "address2"},
* }
* )
*/
public function indexAction(Paginator $paginator)
{
}
The DQL generated by this annotation is
SELECT x, r4, r5
FROM Mmoreram\\ControllerExtraBundle\\Tests\\FakeBundle\\Entity\\Fake x
INNER JOIN x.relation3 r3
INNER JOIN x.relation4 r4
LEFT JOIN x.relation r
LEFT JOIN x.relation2 r2
LEFT JOIN x.relation5 r5
WHERE enabled = ?where0
AND x.address1 IS NOT NULL
AND x.address2 IS NOT NULL
ORDER BY createdAt ASC, id ASC
This annotation can create a PagerFanta instance if you need it. You only have to define your parameter as such, and the annotation resolver will wrap your paginator with a Pagerfanta object instance.
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
use Pagerfanta\Pagerfanta;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* page = 1,
* limit = 10
* )
*/
public function indexAction(Pagerfanta $paginator)
{
}
This annotation can create a KNPPaginator instance if you need it. You only have to define your parameter as such, and the annotation resolver will wrap your paginator with a KNPPaginator object instance.
use Mmoreram\ControllerExtraBundle\Annotation\CreatePaginator;
use Knp\Component\Pager\Pagination\PaginationInterface;
/**
* Simple controller method
*
* This Controller matches pattern /myroute/paginate/
*
* @CreatePaginator(
* entityNamespace = "MmoreramCustomBundle:User",
* page = 1,
* limit = 10
* )
*/
public function indexAction(PaginationInterface $paginator)
{
}
Loads an entity from your database, or creates a new one.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Entity;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @Entity(
* namespace = "MmoreramCustomBundle:User",
* name = "user"
* )
*/
public function indexAction(User $user)
{
}
By default, if
name
option is not set, the generated object will be placed in a parameter named$entity
. This behaviour can be configured usingdefault_name
in configuration.
You can also use setters in Entity annotation. It means that you can simply call entity setters using Request attributes.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Entity;
use Mmoreram\ControllerExtraBundle\Entity\Address;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @Entity(
* namespace = "MmoreramCustomBundle:Address",
* name = "address"
* )
* @Entity(
* namespace = "MmoreramCustomBundle:User",
* name = "user",
* setters = {
* "setAddress": "address"
* }
* )
*/
public function indexAction(Address $address, User $user)
{
}
When User
instance is built, method setAddress
is called using as parameter the new Address
instance.
New entities are just created with a simple new()
, so they are not persisted. By default, they will be persisted using configured manager, but you can disable this feature using persist
option.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Entity;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @Entity(
* namespace = "MmoreramCustomBundle:User",
* name = "user",
* persist = false
* )
*/
public function indexAction(User $user)
{
}
When you define a new Entity annotation, you can also request the mapped entity given a map. It means that if a map is defined, this bundle will try to request the mapped instance satisfying it.
The keys of the map represent the names of the mapped fields and the values represent their desired values. Remember than you can refer to any Request attribute by using format ~field~
, to any $_GET
element by using format ?field?
or to any $_POST
by using format #field#
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Entity;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* This Controller matches pattern /user/edit/{id}/{username}
*
* @Entity(
* namespace = "MmoreramCustomBundle:User",
* name = "user",
* mapping = {
* "id": "~id~",
* "username": "~username~"
* }
* )
*/
public function indexAction(User $user)
{
}
In this case, you will try to get the mapped instance of User with passed id. If some mapping is defined and any entity is found, a new EntityNotFoundException` is thrown.
So what if one ore more than one mapping references are not found? For example, you're trying to map the {id} parameter from your route, but this parameter is not even defined. Whan happens here? Well, you can assume then that you want to pass a new entity instance by using the mappingFallback.
By default, if
mapping_fallback
option is not set, the used value will be the parameterdefault_mapping_fallback
defined in configuration. By default this value isfalse
Don't confuse with the scenario where you're looking for an entity in your database, all mapping references have been resolved, and the entity is not found. In that case, a common "EntityNotFound" exception will be thrown by Doctrine.
Lets see an example. Because we have enabled the mappingFallback, and because the mapping definition does not match the assigned route, we will return a new empty User entity.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Entity;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* This Controller matches pattern /user/edit/{id}
*
* @LoadEntity(
* namespace = "MmoreramCustomBundle:User",
* name = "user",
* mapping = {
* "id": "~id~",
* "username": "~nonexisting~"
* },
* mappingFallback = true
* )
*/
public function indexAction(User $user)
{
// $user->getId() === null
}
By default, the Doctrine entity manager provides the right repository per each entity (not the default one, but the right specific one). Although, you can define a custom repository to be used in your annotation by using the repository configuration.
/**
* Simple controller method
*
* @CreateEntity(
* namespace = "MmoreramCustomBundle:User",
* mapping = {
* "id": "~id~",
* "username": "~username~"
* }
* repository = {
* "class" = "Mmoreram\CustomBundle\Repository\AnotherRepository",
* },
* )
*/
public function indexAction(User $user)
{
}
By default, the method findOneBy will always be used, unless you define another one.
/**
* Simple controller method
*
* @CreateEntity(
* namespace = "MmoreramCustomBundle:User",
* mapping = {
* "id": "~id~",
* "username": "~username~"
* }
* repository = {
* "class" = "Mmoreram\CustomBundle\Repository\AnotherRepository",
* "method" = "find",
* },
* )
*/
public function indexAction(User $user)
{
}
When the annotation considers that a new entity must be created, because no mapping information has been provided, or because the mapping fallback has been activated, by default a new instance will be created by using the namespace value.
This configuration block has three positions
You can define the factory with a simple namespace
/**
* Simple controller method
*
* @CreateEntity(
* namespace = "MmoreramCustomBundle:User",
* factory = {
* "class" = "Mmoreram\CustomBundle\Factory\UserFactory",
* "method" = "create",
* "static" = true,
* },
* )
*/
public function indexAction(User $user)
{
}
If you want to define your Factory as a service, with the possibility of overriding namespace, you can simply define service name. All other options have the same behaviour.
parameters:
#
# Factories
#
my.bundle.factory.user_factory: Mmoreram\CustomBundle\Factory\UserFactory
/**
* Simple controller method
*
* @CreateEntity(
* class = {
* "factory" = my.bundle.factory.user_factory,
* "method" = "create",
* "static" = true,
* },
* )
*/
public function indexAction(User $user)
{
}
If you do not define the method
, default one will be used. You can override this default value by defining new one in your config.yml
. Same with static
value
controller_extra:
entity:
default_factory_method: create
default_factory_static: true
Provides form injection in your controller actions. This annotation only needs a name to be defined in, where you must define namespace where your form is placed.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\CreateForm;
use Symfony\Component\Form\AbstractType;
/**
* Simple controller method
*
* @CreateForm(
* class = "\Mmoreram\CustomBundle\Form\Type\UserType",
* name = "userType"
* )
*/
public function indexAction(AbstractType $userType)
{
}
By default, if
name
option is not set, the generated object will be placed in a parameter named$form
. This behaviour can be configured usingdefault_name
in configuration.
You can not just define your Type location using the namespace, in which case a new AbstractType element will be created. but you can also define it using service alias, in which case this bundle will return an instance using Symfony DI.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\CreateForm;
use Symfony\Component\Form\AbstractType;
/**
* Simple controller method
*
* @CreateForm(
* class = "user_type",
* name = "userType"
* )
*/
public function indexAction(AbstractType $userType)
{
}
This annotation allows you to not only create an instance of FormType, but also allows you to inject a Form object or a FormView object
To inject a Form object you only need to cast method value as such.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\CreateForm;
use Symfony\Component\Form\Form;
/**
* Simple controller method
*
* @CreateForm(
* class = "user_type",
* name = "userForm"
* )
*/
public function indexAction(Form $userForm)
{
}
You can also, using [SensioFrameworkExtraBundle][1]'s [ParamConverter][2], create a Form object with an previously created entity. you can define this entity using entity
parameter.
<?php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Form\Form;
use Mmoreram\ControllerExtraBundle\Annotation\CreateForm;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @Route(
* path = "/user/{id}",
* name = "view_user"
* )
* @ParamConverter("user", class="MmoreramCustomBundle:User")
* @CreateForm(
* class = "user_type",
* entity = "user"
* name = "userForm",
* )
*/
public function indexAction(User $user, Form $userForm)
{
}
To handle current request, you can set handleRequest
to true. By default this value is set to false
<?php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Form\Form;
use Mmoreram\ControllerExtraBundle\Annotation\CreateForm;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @Route(
* path = "/user/{id}",
* name = "view_user"
* )
* @ParamConverter("user", class="MmoreramCustomBundle:User")
* @CreateForm(
* class = "user_type",
* entity = "user"
* handleRequest = true,
* name = "userForm",
* )
*/
public function indexAction(User $user, Form $userForm)
{
}
You can also add as a method parameter if the form is valid, using validate
setting. Annotation will place result of $form->isValid()
in specified method argument.
<?php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Form\Form;
use Mmoreram\ControllerExtraBundle\Annotation\CreateForm;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @Route(
* path = "/user/{id}",
* name = "view_user"
* )
* @ParamConverter("user", class="MmoreramCustomBundle:User")
* @CreateForm(
* class = "user_type",
* entity = "user"
* handleRequest = true,
* name = "userForm",
* validate = "isValid",
* )
*/
public function indexAction(User $user, Form $userForm, $isValid)
{
}
To inject a FormView object you only need to cast method variable as such.
<?php
use Symfony\Component\Form\FormView;
use Mmoreram\ControllerExtraBundle\Annotation\CreateForm;
/**
* Simple controller method
*
* @CreateForm(
* class = "user_type",
* name = "userFormView"
* )
*/
public function indexAction(FormView $userFormView)
{
}
Flush annotation allows you to flush entityManager at the end of request using kernel.response event
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Flush;
/**
* Simple controller method
*
* @Flush
*/
public function indexAction()
{
}
If not otherwise specified, default Doctrine Manager will be flushed with this annotation. You can overwrite default Manager in your config.yml
file.
controller_extra:
flush:
default_manager: my_custom_manager
You can also override this value in every single Flush Annotation instance defining manager
value
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Flush;
/**
* Simple controller method
*
* @Flush(
* manager = "my_own_manager"
* )
*/
public function indexAction()
{
}
If you want to change default manager in all annotation instances, you should override bundle parameter in your config.yml
file.
controller_extra:
flush:
default_manager: my_own_manager
If any parameter is set, annotation will flush all. If you only need to flush one or many entities, you can define explicitly which entity must be flushed.
<?php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Mmoreram\ControllerExtraBundle\Annotation\Flush;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @ParamConverter("user", class="MmoreramCustomBundle:User")
* @Flush(
* entity = "user"
* )
*/
public function indexAction(User $user)
{
}
You can also define a set of entities to flush
<?php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Mmoreram\ControllerExtraBundle\Annotation\Flush;
use Mmoreram\ControllerExtraBundle\Entity\Address;
use Mmoreram\ControllerExtraBundle\Entity\User;
/**
* Simple controller method
*
* @ParamConverter("user", class="MmoreramCustomBundle:User")
* @ParamConverter("address", class="MmoreramCustomBundle:Address")
* @Flush(
* entity = {
* "user",
* "address"
* }
* )
*/
public function indexAction(User $user, Address $address)
{
}
If multiple @Mmoreram\Flush are defined in same action, last instance will overwrite previous. Anyway just one instance should be defined.
JsonResponse annotation allows you to create a Symfony\Component\HttpFoundation\JsonResponse
object, given a simple controller return value.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\ToJsonResponse;
/**
* Simple controller method
*
* @ToJsonResponse
*/
public function indexAction(User $user, Address $address)
{
return array(
'This is my response'
);
}
By default, JsonResponse is created using default status
and headers
defined in bundle parameters. You can overwrite them in your config.yml
file.
controller_extra:
json_response:
default_status: 403
default_headers:
"User-Agent": "Googlebot/2.1"
You can also overwrite these values in each @JsonResponse
annotation.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\ToJsonResponse;
/**
* Simple controller method
*
* @ToJsonResponse(
* status = 403,
* headers = {
* "User-Agent": "Googlebot/2.1"
* }
* )
*/
public function indexAction(User $user, Address $address)
{
return array(
'This is my response'
);
}
If an Exception is returned the response status is set by default to 500 and the Exception message is returned as response.
STATUS 500 Internal server error
{
message : 'Exception message'
}
In case we use a HttpExceptionInterface the use the exception status code as status code. In case we launch this exception
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
...
return new NotFoundHttpException('Resource not found');
We'll receive this response
STATUS 404 Not Found
{
message : 'Resource not found'
}
If the exception is being launched on an annotation (e.g. Entity annotation) remember to add the JsonResponse annotation at the beginning or at least before any annotation that could cause an exception.
If multiple @Mmoreram\JsonResponse are defined in same action, last instance will overwrite previous. Anyway just one instance should be defined.
Log annotation allows you to log any plain message before or after controller action execution
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Log;
/**
* Simple controller method
*
* @Log("Executing index Action")
*/
public function indexAction()
{
}
You can define the level of the message. You can define default one if none is specified overriding it in your config.yml
file.
controller_extra:
log:
default_level: warning
Every Annotation instance can overwrite this value using level
field.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Log;
/**
* Simple controller method
*
* @Log(
* value = "Executing index Action",
* level = @Log::LVL_WARNING
* )
*/
public function indexAction()
{
}
Several levels can be used, as defined in [Psr\Log\LoggerInterface][6] interface
You can also define the execution of the log. You can define default one if none is specified overriding it in your config.yml
file.
controller_extra:
log:
default_execute: pre
Every Annotation instance can overwrite this value using level
field.
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Log;
/**
* Simple controller method
*
* @Log(
* value = "Executing index Action",
* execute = @Log::EXEC_POST
* )
*/
public function indexAction()
{
}
Several executions can be used,
The Get annotation allows you to get any parameter from the request query string.
For a GET
request like:
GET /my-page?foo=bar HTTP/1.1
You can can simply get the foo
var using the GET
annotation
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Get;
/**
* Simple controller method
*
* @Get(
* path = "foo"
* )
*/
public function indexAction($foo)
{
// Use the foo var
}
You can also customize the var name and the default value in case the var is not sent on the query string.
For a GET
request like:
GET /my-page HTTP/1.1
And this annotation
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Get;
/**
* Simple controller method
*
* @Get(
* path = "foo",
* name = "varName",
* default = 'bar',
* )
*/
public function indexAction($varName)
{
// This would print 'bar'
echo $varName;
}
The Post annotation allows you to get any parameter from the post request body.
For a POST
request like:
POST /my-page HTTP/1.1
foo=bar
You can can simply get the foo
var using the POST
annotation
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Post;
/**
* Simple controller method
*
* @Post(
* path = "foo"
* )
*/
public function indexAction($foo)
{
// Use the foo var
}
You can also customize the var name and the default value in case the var is not sent on the query string.
For a POST
request like:
POST /my-page HTTP/1.1
And this annotation
<?php
use Mmoreram\ControllerExtraBundle\Annotation\Post;
/**
* Simple controller method
*
* @Post(
* path = "foo",
* name = "varName",
* default = 'bar',
* )
*/
public function indexAction($varName)
{
// This would print 'bar'
echo $varName;
}
Custom annotations
Using this bundle you can now create, in a very easy way, your own controller annotation.
The annotation object. You need to define the fields your custom annotation will contain. Must extends Mmoreram\ControllerExtraBundle\Annotation\Annotation
abstract class.
<?php
namespace My\Bundle\Annotation;
use Mmoreram\ControllerExtraBundle\Annotation\Annotation;
/**
* Entity annotation driver
*
* @Annotation
* @Target({"METHOD"})
*/
final class MyCustomAnnotation extends Annotation
{
/**
* @var string
*
* Dummy field
*/
public $field;
/**
* Get Dummy field
*
* @return string Dummy field
*/
public function getField()
{
return $this->field;
}
}
Once you have defined your own annotation, you have to resolve how this annotation works in a controller. You can manage this using a Resolver. Must extend Mmoreram\ControllerExtraBundle\Resolver\AnnotationResolver;
abstract class.
<?php
namespace My\Bundle\Resolver;
use Symfony\Component\HttpFoundation\Request;
use Mmoreram\ControllerExtraBundle\Resolver\AnnotationResolver;
use Mmoreram\ControllerExtraBundle\Annotation\Annotation;
/**
* MyCustomAnnotation Resolver
*/
class MyCustomAnnotationResolver extends AnnotationResolver
{
/**
* Specific annotation evaluation.
*
* This method must be implemented in every single EventListener
* with specific logic
*
* All method code will executed only if specific active flag is true
*
* @param Request $request
* @param Annotation $annotation
* @param ReflectionMethod $method
*/
public function evaluateAnnotation(
Request $request,
Annotation $annotation,
ReflectionMethod $method
)
{
/**
* You can now manage your annotation.
* You can access to its fields using public methods.
*
* Annotation fields can be public and can be acceded directly,
* but is better for testing to use getters; they can be mocked.
*/
$field = $annotation->getField();
/**
* You can also access to existing method parameters.
*
* Available parameters are:
*
* # ParamConverter parameters ( See `resolver_priority` config value )
* # All method defined parameters, included Request object if is set.
*/
$entity = $request->attributes->get('entity');
/**
* And you can now place new elements in the controller action.
* In this example we are creating new method parameter
* called $myNewField with some value
*/
$request->attributes->set(
'myNewField',
new $field()
);
return $this;
}
}
This class will be defined as a service, so this method is computed just before executing current controller. You can also subscribe to some kernel events and do whatever you need to do ( You can check Mmoreram\ControllerExtraBundle\Resolver\LogAnnotationResolver
for some examples.
Once Resolver is done, we need to define our service as an Annotation Resolver. We will use a custom tag
.
parameters:
#
# Resolvers
#
my.bundle.resolver.my_custom_annotation_resolver.class: My\Bundle\Resolver\MyCustomAnnotationResolver
services:
#
# Resolvers
#
my.bundle.resolver.my_custom_annotation_resolver:
class: %my.bundle.resolver.my_custom_annotation_resolver.class%
tags:
- { name: controller_extra.annotation }
We need to register our annotation inside our application. We can just do it in the boot()
method of bundle.php
file.
<?php
namespace My\Bundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Doctrine\Common\Annotations\AnnotationRegistry;
/**
* MyBundle
*/
class ControllerExtraBundle extends Bundle
{
/**
* Boots the Bundle.
*/
public function boot()
{
$kernel = $this->container->get('kernel');
AnnotationRegistry::registerFile($kernel
->locateResource("@MyBundle/Annotation/MyCustomAnnotation.php")
);
}
}
Et voilà! We can now use our custom Annotation in our project controllers.
Author: mmoreram
Source Code: https://github.com/mmoreram/ControllerExtraBundle
License: MIT license
1597656965
Finding the best Android app developers in India is a bit of a problem because many Android developers in India made so confused that which Developers will be the best for your project. And they claim that we are the best developers for Android App Development but they actually not. So here we are introducing AppClues infotech who are expert to develop Android App Development.
Let’s Know About Why Android Application Required
In modern times, the use of Android apps has increased and it has to grow in the days to come. Most of peoples do shopping online through the application. So if you want to grow your business and want to your business Online that you need to develop your own Application
Reason Why Choose Android Application
Many Users- Today, largely of the user’s crossways the world are using android mobiles, thus, it is suitable to look for android app builders to transfer your website into an app.
Various Platforms - Android app developers use Java programming language for Android business app development. Thus main you can aim multiple platforms by developing an android app.
Ease of Open Source - Android is an open-source platform. That implies Google doesn’t ask for money and any fee for using this platform.
Compatibility with Various Dives- One of the biggest reward if choosing an android app for business is that there’s no limitation on devices to be used for building an android app.
Quicker Development - The duration of deployment for iOS apps stretches up to weeks whereas developing android apps for business will only take a couple of hours.
Greater Customization Scope- one more attractive fact about Android is that it allows the Android app developers to modify the apps as per the business necessity.
AppClues Infotech Services:
About the AppClues Infotech:
Having many years of experience in IT Services, we are expert to deliver the best custom app development services in India and USA. When we talk about our developers they are highly experienced and very talented that develops applications very faster and bugs less in the return of that we will get client satisfaction.
#best android app developers in india #top mobile app developers in india #best android app development company in india #best android app development company in usa #best android app development company in new york
1626174057
Looking for the best on-demand mobile app development company in USA & India?
AppClues Infotech is the most trusted and well-renowned on-demand app development services provider company that creates the most scalable and innovative mobile apps for various industries and multiple platforms.
If you have on-demand mobile app ideas then just share with us and get the complete solution for your app development project.
For more info:
Website: https://www.appcluesinfotech.com/
Email: info@appcluesinfotech.com
Call: +1-978-309-9910
#on-demand app development company in usa & india #best on-demand app development company in usa & india #top on-demand app development company in usa & india #professional on-demand app development company in usa & india #custom on-demand app development company in usa & india #hire on-demand app developers in usa & india