Home / 2014 / November

Monthly Archives: November 2014

সিম্ফনিতে (Symfony) কীভাবে কাস্টম ফর্ম তৈরি করা যায়

এই টিউটোরিয়ালে আমি দেখাব সিম্পনিতে (Symfony) কীভাবে কাস্টম ফর্ম তৈরি করা যায় আমি ধরে নিচ্ছি আগে থেকেই কমপ্লিট সিম্ফনি ইন্সটল করা আছে আপনার পিসিতে, যদি
ইন্সটল করা না থাকে তাহলে আমার এই বাংলা ভিডিও তা দেখে নিতে পারেন

এখন,আমার ডিরেক্টরিটা চেঞ্জ করতে হবে যেখানে আমার কমপ্লিট সিম্ফনি ইন্সটল করা আছে
path
আপনার ডিরেক্টরিটা ভিন্ন হতে পারে , কারন আমি এখানে লিনাক্স ব্যবহার করার মাধ্যমে দেখাচ্ছি , তারপর টাইপ করুন

php app/console;

টার্মিনালের মাধ্যমে , আপনে দেখতে পারবেন অনেকগুলো সিম্ফনি কমান্ড

Rasel Khan:~$ php app/console
Symfony version 2.6.4 - app/dev/debug

Usage:
 [options] command [arguments]

Options:
 --help (-h)           Display this help message
 --quiet (-q)          Do not output any message
 --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
 --version (-V)        Display this application version
 --ansi                Force ANSI output
 --no-ansi             Disable ANSI output
 --no-interaction (-n) Do not ask any interactive question
 --shell (-s)          Launch the shell.
 --process-isolation   Launch commands from shell as a separate process.
 --env (-e)            The Environment name. (default: "dev")
 --no-debug            Switches off debug mode.

Available commands:
 help                                  Displays help for a command
 list                                  Lists commands
acme
 acme:hello                            Hello World example command
assetic
 assetic:dump                          Dumps all assets to the filesystem
 assetic:watch                         Dumps assets to the filesystem as their source files are modified
assets
 assets:install                        Installs bundles web assets under a public web directory
cache
 cache:clear                           Clears the cache
 cache:warmup                          Warms up an empty cache
config
 config:debug                          Dumps the current configuration for an extension
 config:dump-reference                 Dumps the default configuration for an extension
container
 container:debug                       Displays current services for an application
debug
 debug:config                          Dumps the current configuration for an extension
 debug:container                       Displays current services for an application
 debug:event-dispatcher                Displays configured listeners for an application
 debug:router                          Displays current routes for an application
 debug:swiftmailer                     Displays current mailers for an application
 debug:translation                     Displays translation messages informations
 debug:twig                            Shows a list of twig functions, filters, globals and tests
doctrine
 doctrine:cache:clear-metadata         Clears all metadata cache for an entity manager
 doctrine:cache:clear-query            Clears all query cache for an entity manager
 doctrine:cache:clear-result           Clears result cache for an entity manager
 doctrine:database:create              Creates the configured databases
 doctrine:database:drop                Drops the configured databases
 doctrine:ensure-production-settings   Verify that Doctrine is properly configured for a production environment.
 doctrine:generate:crud                Generates a CRUD based on a Doctrine entity
 doctrine:generate:entities            Generates entity classes and method stubs from your mapping information
 doctrine:generate:entity              Generates a new Doctrine entity inside a bundle
 doctrine:generate:form                Generates a form type class based on a Doctrine entity
 doctrine:mapping:convert              Convert mapping information between supported formats.
 doctrine:mapping:import               Imports mapping information from an existing database
 doctrine:mapping:info                 
 doctrine:query:dql                    Executes arbitrary DQL directly from the command line.
 doctrine:query:sql                    Executes arbitrary SQL directly from the command line.
 doctrine:schema:create                Executes (or dumps) the SQL needed to generate the database schema
 doctrine:schema:drop                  Executes (or dumps) the SQL needed to drop the current database schema
 doctrine:schema:update                Executes (or dumps) the SQL needed to update the database schema to match the current mapping metadata.
 doctrine:schema:validate              Validate the mapping files.
generate
 generate:bundle                       Generates a bundle
 generate:controller                   Generates a controller
 generate:doctrine:crud                Generates a CRUD based on a Doctrine entity
 generate:doctrine:entities            Generates entity classes and method stubs from your mapping information
 generate:doctrine:entity              Generates a new Doctrine entity inside a bundle
 generate:doctrine:form                Generates a form type class based on a Doctrine entity
init
 init:acl                              Mounts ACL tables in the database
orm
 orm:convert:mapping                   Convert mapping information between supported formats.
router
 router:debug                          Displays current routes for an application
 router:dump-apache                    Dumps all routes as Apache rewrite rules
 router:match                          Helps debug routes by simulating a path info match
security
 security:check                        Checks security issues in your project dependencies
server
 server:run                            Runs PHP built-in web server
 server:start                          Starts PHP built-in web server in the background
 server:status                         Outputs the status of the built-in web server for the given address
 server:stop                           Stops PHP's built-in web server that was started with the server:start command
swiftmailer
 swiftmailer:debug                     Displays current mailers for an application
 swiftmailer:email:send                Send simple email message
 swiftmailer:spool:send                Sends emails from the spool
translation
 translation:debug                     Displays translation messages informations
 translation:update                    Updates the translation file
twig
 twig:debug                            Shows a list of twig functions, filters, globals and tests
 twig:lint                             Lints a template and outputs encountered errors
yaml
 yaml:lint                             Lints a file and outputs encountered errors

এখন, নতুন একটা সিম্ফনি বান্ডেল তৈরি করব জেনারেট কমান্ডের ( generate:bundle ) মাধ্যমে। বান্ডেল জেনারেট করতে সমস্যা হলে আমরা সেই বান্ডেলের হেল্প নিব এই

php app/console generate:bundle --help;

কমান্ডের মাধ্যমে, তাহলে সবগুলো কমান্ড দেখাবে কীভাবে তৈরি করতে হবে ।

N:B The bundle namespace must end with “Bundle”.

নীচের স্টেপগুলো অনুসরন করি কীভাবে বান্ডেল এবং ইনটিটি (Entity) তৈরি করতে পারি

স্টেপ -১ নতুন একটা বান্ডেল তৈরি করব একমি ডিরেক্টরির ( Acme directory ) নিচে , সিম্ফনি ইন্সটল করার সময় ডিফল্ট অবস্থায় এই ডিরেক্টরিটা পাবেন । আমার বান্ডেলের নাম হবে টাস্ক-বান্ডেল (TaskBundle)।
এখন টার্মিনালের মাধ্যমে টাইপ করেন

 php app/console generate:bundle --namespace=Acme/TaskBundle;

তারপর এন্টার প্রেস করেন ।

স্টেপ -২ আপনে দেখতে পারবেন আপনার বান্ডেলের নাম , নীচের কোডটার মত

Bundle name [AcmeTaskBundle]:

স্টেপ -৩ তারপর প্রেস এন্টার

Target directory [/var/www/Symfony/src]:

স্টেপ -৪ এই স্টেপে বলে দিতে হবে আপনার বান্ডেলটা কোন ফরম্যাট-এ কনফিগারেশন হবে , আমি বেবহার করছি yml ফরম্যাটে , নীচের কোডটার মত

Configuration format (yml, xml, php, or annotation):yml

স্টেপ -৫ তারপর টাইপ করেন yes , নীচের কোডটার মত

 Do you want to generate the whole directory structure [no]? yes

You are going to generate a “AcmeTaskBundleAcmeTaskBundle” bundle
in “/var/www/Symfony/src/” using the “annotation” format.

স্টেপ -৬ প্রেস এন্টার

Do you confirm generation [yes]?

You saw Bundle generation
Generating the bundle code: OK
Checking that the bundle is autoloaded: OK

স্টেপ -৭ এন্টার প্রেস করতে থাকেন যতক্ষণ না পর্যন্ত এই স্ট্রিং টা দেখায় “You can now start using the generated code! “। নীচের স্টাকচারটা পিকচারটা দেখেন
pic_3

স্টেপ -৮ এখন, আমি নতুন একটা ইনটিটি (Entity) তৈরি এই “doctrine:generate:entity” কমান্ডের মাধ্যমে ।

php app/console doctrine:generate:entity;

স্টেপ -৯ তারপর ইনটিটি (Entity) শর্টকাট নাম চাইবে

 Next The Entity shortcut name like AcmeTaskBundle:Task 

স্টেপ -১০ এই স্টেপে বলে দিতে হবে আপনার ইনটিটি (Entity) ম্যাপিং ইনফর্মেশনটা ( mapping information) কোন ফরম্যাট-এ কনফিগারেশন হবে , আমি বেবহার করছি yml ফরম্যাটে ।

Configuration format (yml, xml, php, or annotation) [annotation]:yml

আপনার কমপ্লিট ফাঁকা একটা ইনটিটি (Entity) শুরু হয়ে গেল, এখন আপনার মনের মতন করে কিছু ফিল্ড বা ফাংশন অ্যাড করে নেন ।
বি : দ্র আপনার ফিল্ড তৈরি করার পর প্রাইমারি কী (primary key) অটোমেটিক অ্যাড হয়ে যাবে, এটা নিয়ে আপনার ভাবতে হবে না

কমপ্লিট ইন্সটল হওয়ার পর ওপেন করেন Task.php ফাইল এবং অ্যাড করেন নীচের কোডটা

<?php
 namespace AcmeTaskBundleEntity; 
 
 class Task {  

	 protected $task;  
 	 protected $dueDate; 
 
	 public function getTask()     { 

         return $this->task;
	}

	public function setTask($task){
 
  		$this->task = $task;
 	}
 
     public function getDueDate(){
 
  		return $this->dueDate;
	}
 
 	public function setDueDate(DateTime $dueDate = null){
 		$this->dueDate = $dueDate;
 	}
}
 ?>

টাস্ক Task নামে একটা ক্লাস তৈরি করলাম পুরাতন পিএইচপি অবজেক্ট-এর মত এবং সাথে কিছু ফাংশন আছে ……………।।
বি : দ্র এই কোডটা সম্বন্ধে বেশী কিছু বললাম না, আমি ধরে নিচ্ছি যারা সিম্ফনি নিয়ে কাজ করতে আসছেন বা চান তারা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাল ধারনা রাখেন

এখন, ওপেন করুন DefaultController.php ফাইল আন্ডার AcmeTaskBundleController ডিরেক্টরি এবং নীচের কোডটা অ্যাড করেন

 <?php
 // src/Acme/TaskBundle/Controller/DefaultController.php
 namespace AcmeTaskBundleController;

 use SymfonyBundleFrameworkBundleControllerController;
 use AcmeTaskBundleEntityTask;
 use SymfonyComponentHttpFoundationRequest;

 class DefaultController extends Controller{
 
 		public function formAction(Request $request){
 
 			$task = new Task();
 			$task->setTask('Write a blog post');
 			$task->setDueDate(new DateTime('tomorrow'));

 			$form = $this->createFormBuilder($task)
     			->add('task', 'text')
 				->add('dueDate', 'date')
 				->add('save', 'submit', array('label' => 'Create Post'))
 				->getForm();
 
 				return $this->render('AcmeTaskBundle:Default:new.html.twig',   array(
 					'form' => $form->createView(),
 				));
 		}
 }
 ?> 

আমি নতুন একটা রাউট (Route) তৈরি করে নিয়েছি form(ফর্ম ) নামে , লাইন নাম্বার ১১ তে দেখুন formAction এই ফাংশনটা কাজ করবে যখন ব্রাউজারে এই yoursite.com/form টা পাস হবে ,
এই এক্সামপলটা দেখাবে কীভাবে আপনার ফর্ম ডিরেক্টরিটা তৈরি হবে কন্ট্রোলারের (controller) মধ্য , ফর্মের জন্য আপনার দুইটা ফিল্ড আছে টাস্ক (task) এবং
ডিউডেট (dueDate) লাইন নাম্বার ১৮, ১৯ এবং এদের প্রপার্টিগুলো আছে ইনটিটি Task.php ক্লাসে , ৫ নাম্বার লাইন -এ অ্যাড করেছি আমি use AcmeTaskBundleEntityTask; এটা অ্যাড করার ফলে আমি Task ক্লাসের প্রপার্টিগুলো ব্যবহার করতে পারছি,

এখন আপনার ফর্ম তৈরি হয়ে গেল , তারপর এটাকে আমি render করে দিব অন্য একটা টেমপ্লেট-এ দেখানোর জন্য , ইহা সাকসেস হয় ভিউ (“view”) অবজেক্ট-এর মাধ্যমে , ফর্মের কিছু হেল্পার ফাংশন বেবহার করব ফর্মটা দেখানোর জন্য , ওপেন করুন এই src/Acme/TaskBundle/Resources/views/Default ডিরেক্টরিটা, এখানে নতুন একটা ফাঁকা টুয়িগ(twig) টেমপ্লেট তৈরি করেন ( form.html.twig) নামে, তারপর নীচের কোডটা অ্যাড করেন

 
{{ form(form) }}
 

এক্সামপলটা আপনি ফর্ম সাবমিট করতে পারবেন পোস্ট (POST) রিকুয়েস্টের মাধ্যমে এবং একই ইউ-আর-এল (URL) ইহা ডিসপ্লে করবে । পরবর্তীতে দেখাব কীভাবে Request ( রেকুএস্তে ) Method (ফাংশন) পরিবর্তন করা যায় .

এখন, প্রয়োজন ইউজারের কাছ থেকে ডাটা সাবমিট করা , ইউজারটা অবশ্যই রাইট করবে ফর্মের মধ্য , এর জন্য কন্ট্রোলারে ( Controller) কিছু ফাংশন অ্যাড করে নিব , নীচের কোডটা দেখেন ।

 <?php

 $form->handleRequest($request);

	if ($form->isValid()) {

		return $this->redirect($this->generateUrl('task_success'));
 	}
 ?> 

এই handleRequest() ফাংশনটা প্রবর্তিত হয় Symfony 2.3 তে , Request ( রিকুয়েস্টে ) টা গৃহীত হবে সাবমিট ফাংশন ধারা ..

এখন, ফর্ম-এর ইনপুট ফিল্ড-এ ডাটা ইনপুট শেষ হলে যখন আমি সাবমিট বাটনে ক্লিক করব, তখন অন্য আরেকটা রাউট-এ (Route) রিডাইরেক্ট (Redirect) করবে , এটা করার জন্য আমি কন্ট্রোলারের ( Controller) মধ্য isClicked() ফাংশনটা ব্যবহার করব, নীচে দেখুন

<?php
  
 	if ($form->isValid()) {
 
		$nextAction = $form->get('save')->isClicked()
 				? 'task_success'
 				: 'task_fail';
		return $this->redirect($this->generateUrl($nextAction));
 	}
?>

এখানে, ইউজার যখন ফর্মটা সাবমিট করবে তখন এটা ভ্যালিড কিনা তা চেক করে নিলাম isValid() ফাংশনের মাধ্যমে , তারপর আমি Condition দিলাম যদি ক্লিকএবল এবং ভ্যালিড হয় তখন সে /task_success রাউট-এ (Route) রিডাইরেক্ট (Redirect) করবে , আর যদি ভ্যালিড না হয় /task_fail রাউট-এ (Route) রিডাইরেক্ট (Redirect) করবে।

আমি এখানে forward() ফাংশনটা ব্যবহার করেছি দুইটা রাউট-এর জন্য
For task_new:

$this->forward('AcmeTaskBundle:Default:task_new');

For task_success:

 $this->forward('AcmeTaskBundle:Default:task_success'); 

এই হচ্ছে সিম্পল একটা ফর্ম তৈরি সিম্ফনিতে , কারও কোন প্রব্লেম হলে পোস্টের নীচে কমেন্ট করবেন , সবাই ভাল থাকবেন !!

Twitter Api

In this tuts I’m going to show now how to add or create embeddable timelines twitter api in your website, make it easy to syndicate any public Twitter timeline to your website with one line of code.

Create an embedded timeline from your widgets settings page on twitter.com, or choose Create an embedded timeline from the options menu on profile, search and collection pages. You must should login by your Username && Password on your account.Just like timelines on twitter.com, embeddable timelines are interactive and enable your visitors to reply, Retweet, and favorite Tweets directly from your pages. You can Embedded Timeline individual users, User can added at any time this he/her Websites. Each user timeline includes a follow button in the header, allowing website visitors to follow the account with one-click

Here’s @raselkhancse timeline embedded directly into this page:

This tweets create’s are any public Twitter user, and displays that user’s favorited Tweets.
All the list display the each user by reply their post or comment.
Here’s an example embed code:

<a class="twitter-timeline"
 href="https://twitter.com/raselkhancse"
 data-widget-id="YOUR-WIDGET-ID-HERE">
 Tweets by @raselkhancse
 </a>
 <script type="text/javascript">
 window.twttr = (function (d, s, id) {
 var t, js, fjs = d.getElementsByTagName(s)[0];
 if (d.getElementById(id)) return;
 js = d.createElement(s); js.id = id; js.src= "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);

return window.twttr || (t = { _e: [], ready: function (f) { t._e.push(f) } });
 }(document, "script", "twitter-wjs"));
 </script>

If you’re already including our ‘widgets.js’ JavaScript in your page to show embedded Tweets or Twitter buttons, you don’t need to include this script again; it updates automatically to support new features.

<a
href="https://twitter.com/raselkhancse"
data-widget-id="YOUR-WIDGET-ID-HERE">
Tweets by @raselkhancse
</a>

Here the anchor link include attributes href & data-widget, you can many attributes added in your future application like as height, width, data-theme, data-link-color, data-related,
data-aria-polite, custom-timeline-id………etc.

width="300"
height="500"
data-widget-id="YOUR-WIDGET-ID-HERE"
data-screen-name="raselkhan"
data-show-replies="false"
data-tweet-limit="5"
data-list-owner-screen-name="raselkhan"
data-list-slug="twitter-dev-advocates"

This attributes data-widget indicate in your application id i.e ( data-widget-id=”653452336445443033455584″ ) you’ll get this id from in your account, your ID will showing different number

You should configure a timeline widget from your settings page as normal. Then, use the following attributes to override the source timeline:

  • Users: Add the data-screen-name or data-user-id attribute for the user whose timeline you want to display. You can also specify data-show-replies=”true” to toggle the ‘Show Replies’ option on a per-timeline basis.
  • Collections: Add a data-custom-timeline-id attribute for the custom collection timeline you want to render. Use only the integer portion of the timeline ID.
  • Favorites: Similarly to user timelines, add a data-favorites-screen-name or data-favorites-user-id attribute for the favorites timeline you want to render.
  • Lists: To render a list, you must specify the list owner—data-list-owner-screen-name or data-list-owner-id—and a list identifier, data-list-id or data-list-slug.

All Like other components of the Twitter for Websites suite, embeddable timelines offer excellent mobile browser support:

  • Works on major smartphone browsers.
  • Interface is adaptive for touch (e.g. actions will always be visible, and spacing adjusted.)
  • Graphics optimized for Retina and other high-density displays.
  • Uses web intents for interaction, which also are designed adaptively for mobile.
  • Mobile device support is automatic, using the same embed code.