<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sebastian Müller</title>
	<atom:link href="http://www.sebastian-mueller.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sebastian-mueller.net</link>
	<description>Blog von Sebastian Müller aus Hamm</description>
	<lastBuildDate>Wed, 25 Apr 2012 08:55:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Google &#8211; Weiteres großes Algorithmus Update gegen Webspam</title>
		<link>http://www.sebastian-mueller.net/google-weiteres-groses-algorithmus-update-gegen-webspam/</link>
		<comments>http://www.sebastian-mueller.net/google-weiteres-groses-algorithmus-update-gegen-webspam/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 07:16:21 +0000</pubDate>
		<dc:creator>Sebastian Müller</dc:creator>
				<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.sebastian-mueller.net/?p=86</guid>
		<description><![CDATA[Nach dem großen Panda Update hat Google ein weitreichendes Algorithmus-Update gegen Webspam angekündigt. Durch das Panda-Update waren laut Google 12,1% der Suchbegriffe betroffen. Bei diesem Update sollen es im deutschen Raum 3,1% und im englischsprachigen Raum 3% sein. Also heißt es in Zukunft noch stärker als bisher auf Qualität in den Projekt zu setzen. Denn [...]]]></description>
			<content:encoded><![CDATA[<p>Nach dem großen Panda Update hat Google ein weitreichendes Algorithmus-Update gegen Webspam angekündigt. Durch das Panda-Update waren laut Google 12,1% der Suchbegriffe betroffen. Bei diesem Update sollen es im deutschen Raum 3,1% und im englischsprachigen Raum 3% sein.</p>
<p>Also heißt es in Zukunft noch stärker als bisher auf Qualität in den Projekt zu setzen. Denn wie in fast allen Blogs zu lesen ist, hat es hauptsächlich die kleinen Affiliate-Seiten getroffen und die großen Brands wurden dadurch gestärkt.</p>
<p><strong>Hier ein paar Artikel über das Update:</strong></p>
<ul>
<li><a href="http://googlewebmastercentral.blogspot.de/2012/04/another-step-to-reward-high-quality.html" title="Google Webmaster Centrag Blog" target="_blank">Google Webmaster Centrag Blog</a></li>
<li><a href="http://felixbeilharz.de/der-ueberoptimierungs-filter-ist-da-krasse-rankingverluste-bei-unzaehligen-seiten/" title="Der Überoptimierungs-Filter ist da! Krasse Rankingverluste bei unzähligen Seiten" target="_blank">Der Überoptimierungs-Filter ist da! Krasse Rankingverluste bei unzähligen Seiten</a></li>
<li><a href="http://searchengineland.com/google-launches-update-targeting-webspam-in-search-results-119295" title="Google Launches Update Targeting Webspam In Search Results" target="_blank">Google Launches Update Targeting Webspam In Search Results</a></li>
<li><a href="http://www.boeserseo.com/google/google-raumt-weiter-die-serps-auf.html" title="Google räumt weiter die Serps auf" target="_blank">Google räumt weiter die Serps auf</a></li>
<li><a href="http://www.seokratie.de/google-spielt-groses-update-ein/" title="Google spielt großes Update ein">Google spielt großes Update ein</a></li>
<li><a href="http://www.webmasterworld.com/google/4435785.htm" title="Google Updates and SERP Changes - Apr 2012">Google Updates and SERP Changes &#8211; Apr 2012</a></li>
<li><a href="http://www.abakus-internet-marketing.de/foren/viewtopic/t-108222.html" title="Google Update!">Google Update!</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastian-mueller.net/google-weiteres-groses-algorithmus-update-gegen-webspam/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Assets URL in Symfony2 konfigurieren</title>
		<link>http://www.sebastian-mueller.net/assets-url-in-symfony2-konfigurieren/</link>
		<comments>http://www.sebastian-mueller.net/assets-url-in-symfony2-konfigurieren/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 17:36:23 +0000</pubDate>
		<dc:creator>Sebastian Müller</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony2]]></category>

		<guid isPermaLink="false">http://www.sebastian-mueller.net/?p=77</guid>
		<description><![CDATA[Besonders wenn man Emails mit Symfony2 über ein Console Command verschickt, macht es sinn die URL für die Assets festzulegen. Dies kann man wie folgt machen: Hierbei fällt auf, dass für &#8220;http&#8221; und &#8220;ssl&#8221; ein Array übergeben wird. Man kann also mehrere Assets URLs angeben. Symfony verwendet zufällig eine URL für die Assets. So können [...]]]></description>
			<content:encoded><![CDATA[<p>Besonders wenn man Emails mit Symfony2 über ein Console Command verschickt, macht es sinn die URL für die Assets festzulegen. Dies kann man wie folgt machen:<br />
<span id="more-77"></span><br />
<style type="text/css">


/* *************************************************** */
/* WordPress default theme "twenty-ten" compatibility: */
/* FIXME: Is there a way to limit these changes to pygmentize_krrOiE  */
/*        without editing the WordPress theme directly? */
/* *************************************************** */

#content pre {
  /* The background: transparent is needed to work with WordPress:*/
  background: transparent;
  /* Default WordPress style has a big fat <pre> margin-bottom: */
  margin-bottom: 0px;

  /*color: #333333;*/
  font-size: .9em; 
  line-height: 1.25em;
}

#content table {
}

#content table {
	border: 1px solid #e7e7e7;
    margin: 0 0 0 0;
	text-align: left;
	width: 100%;
}
#content tr th,
#content thead th {
	color: #888;
	font-size: 12px;
	font-weight: bold;
	line-height: 18px;
	padding: 0px;
}
#content tr td {
	border: 0px;
	padding: 0px;
	margin: 0px;
    margin-bottom: 0px;
    padding-bottom: 0px;

}

/* *************************************************** */
/* *************************************************** */

/* Standard fixes to the default output: */

/* Set the tab width in "ch" character units: */
.pygmentize_krrOiE .tabspan {
  display: inline-block;
  width: 4ch;
}

/* When using line numbers, use 100% table width and no cellpadding: */
.pygmentize_krrOiEtable {
  width: 100%;
  border-spacing: 0px;
  border-collapse: collapse;
}


/*
#content table {
    border: 1px solid #E7E7E7;
    margin: 0 -1px 24px 0;
    text-align: left;
    width: 100%;
}
*/

.pygmentize_krrOiEtable td, .pygmentize_krrOiEtable th {
  padding: 0px;
  margin: 0px;
}

/* Add a little buffer so the monotype font doesn't bump directly against the edge: */
.pygmentize_krrOiE pre {
  padding: .6ch;
  color: #F8F8F2;
}

/* This is more consistent with <p> tags... I didn't like it for my use: */
/*
div .pygmentize_krrOiE {
    margin-bottom: 24px; 
}
*/

td.linenos.pygmentize_krrOiE {
  width: 1ch;
  padding: .6ch;
  line-height: 1.25em;
}

.pygmentize_krrOiE td {
  padding-right: 1px;
}


td.linenos { background-color: #f0f0f0; padding-right: 1px; }
span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
pre { line-height: 125%; }
.pygmentize_krrOiE .hll { background-color: #49483e }
.pygmentize_krrOiE  { background: #272822; color: #f8f8f2 }
.pygmentize_krrOiE .c { color: #75715e } /* Comment */
.pygmentize_krrOiE .err { color: #960050; background-color: #1e0010 } /* Error */
.pygmentize_krrOiE .k { color: #66d9ef } /* Keyword */
.pygmentize_krrOiE .l { color: #ae81ff } /* Literal */
.pygmentize_krrOiE .n { color: #f8f8f2 } /* Name */
.pygmentize_krrOiE .o { color: #f92672 } /* Operator */
.pygmentize_krrOiE .p { color: #f8f8f2 } /* Punctuation */
.pygmentize_krrOiE .cm { color: #75715e } /* Comment.Multiline */
.pygmentize_krrOiE .cp { color: #75715e } /* Comment.Preproc */
.pygmentize_krrOiE .c1 { color: #75715e } /* Comment.Single */
.pygmentize_krrOiE .cs { color: #75715e } /* Comment.Special */
.pygmentize_krrOiE .ge { font-style: italic } /* Generic.Emph */
.pygmentize_krrOiE .gs { font-weight: bold } /* Generic.Strong */
.pygmentize_krrOiE .kc { color: #66d9ef } /* Keyword.Constant */
.pygmentize_krrOiE .kd { color: #66d9ef } /* Keyword.Declaration */
.pygmentize_krrOiE .kn { color: #f92672 } /* Keyword.Namespace */
.pygmentize_krrOiE .kp { color: #66d9ef } /* Keyword.Pseudo */
.pygmentize_krrOiE .kr { color: #66d9ef } /* Keyword.Reserved */
.pygmentize_krrOiE .kt { color: #66d9ef } /* Keyword.Type */
.pygmentize_krrOiE .ld { color: #e6db74 } /* Literal.Date */
.pygmentize_krrOiE .m { color: #ae81ff } /* Literal.Number */
.pygmentize_krrOiE .s { color: #e6db74 } /* Literal.String */
.pygmentize_krrOiE .na { color: #a6e22e } /* Name.Attribute */
.pygmentize_krrOiE .nb { color: #f8f8f2 } /* Name.Builtin */
.pygmentize_krrOiE .nc { color: #a6e22e } /* Name.Class */
.pygmentize_krrOiE .no { color: #66d9ef } /* Name.Constant */
.pygmentize_krrOiE .nd { color: #a6e22e } /* Name.Decorator */
.pygmentize_krrOiE .ni { color: #f8f8f2 } /* Name.Entity */
.pygmentize_krrOiE .ne { color: #a6e22e } /* Name.Exception */
.pygmentize_krrOiE .nf { color: #a6e22e } /* Name.Function */
.pygmentize_krrOiE .nl { color: #f8f8f2 } /* Name.Label */
.pygmentize_krrOiE .nn { color: #f8f8f2 } /* Name.Namespace */
.pygmentize_krrOiE .nx { color: #a6e22e } /* Name.Other */
.pygmentize_krrOiE .py { color: #f8f8f2 } /* Name.Property */
.pygmentize_krrOiE .nt { color: #f92672 } /* Name.Tag */
.pygmentize_krrOiE .nv { color: #f8f8f2 } /* Name.Variable */
.pygmentize_krrOiE .ow { color: #f92672 } /* Operator.Word */
.pygmentize_krrOiE .w { color: #f8f8f2 } /* Text.Whitespace */
.pygmentize_krrOiE .mf { color: #ae81ff } /* Literal.Number.Float */
.pygmentize_krrOiE .mh { color: #ae81ff } /* Literal.Number.Hex */
.pygmentize_krrOiE .mi { color: #ae81ff } /* Literal.Number.Integer */
.pygmentize_krrOiE .mo { color: #ae81ff } /* Literal.Number.Oct */
.pygmentize_krrOiE .sb { color: #e6db74 } /* Literal.String.Backtick */
.pygmentize_krrOiE .sc { color: #e6db74 } /* Literal.String.Char */
.pygmentize_krrOiE .sd { color: #e6db74 } /* Literal.String.Doc */
.pygmentize_krrOiE .s2 { color: #e6db74 } /* Literal.String.Double */
.pygmentize_krrOiE .se { color: #ae81ff } /* Literal.String.Escape */
.pygmentize_krrOiE .sh { color: #e6db74 } /* Literal.String.Heredoc */
.pygmentize_krrOiE .si { color: #e6db74 } /* Literal.String.Interpol */
.pygmentize_krrOiE .sx { color: #e6db74 } /* Literal.String.Other */
.pygmentize_krrOiE .sr { color: #e6db74 } /* Literal.String.Regex */
.pygmentize_krrOiE .s1 { color: #e6db74 } /* Literal.String.Single */
.pygmentize_krrOiE .ss { color: #e6db74 } /* Literal.String.Symbol */
.pygmentize_krrOiE .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.pygmentize_krrOiE .vc { color: #f8f8f2 } /* Name.Variable.Class */
.pygmentize_krrOiE .vg { color: #f8f8f2 } /* Name.Variable.Global */
.pygmentize_krrOiE .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.pygmentize_krrOiE .il { color: #ae81ff } /* Literal.Number.Integer.Long */

  </style>




<div class="pygmentize_krrOiE"><pre><span class="c1"># app/config.yml</span>
<span class="l-Scalar-Plain">framework</span><span class="p-Indicator">:</span>
      <span class="l-Scalar-Plain">templating</span><span class="p-Indicator">:</span>
        <span class="l-Scalar-Plain">assets_url</span><span class="p-Indicator">:</span>
           <span class="l-Scalar-Plain">http</span><span class="p-Indicator">:</span> <span class="p-Indicator">[</span><span class="s">&#39;http://assets.example.com/&#39;</span><span class="p-Indicator">]</span>
           <span class="l-Scalar-Plain">ssl</span><span class="p-Indicator">:</span> <span class="p-Indicator">[</span><span class="s">&#39;https://assets.example.com/&#39;</span><span class="p-Indicator">]</span>
</pre></div>

</p>
<p>Hierbei fällt auf, dass für &#8220;http&#8221; und &#8220;ssl&#8221; ein Array übergeben wird. Man kann also mehrere Assets URLs angeben. Symfony verwendet zufällig eine URL für die Assets. So können die Dateien schneller auf der Website heruntergeladen werden. Wenn man also die Möglichkeit hat mehrere Domains/Subdomains für die Assets zu verwenden, sollte man das auf jeden Fall tun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastian-mueller.net/assets-url-in-symfony2-konfigurieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silex sinnvoll einsetzen &#8211; Eine kleine Einführung</title>
		<link>http://www.sebastian-mueller.net/silex-sinnvoll-einsetzen-eine-kleine-einfuhrung/</link>
		<comments>http://www.sebastian-mueller.net/silex-sinnvoll-einsetzen-eine-kleine-einfuhrung/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 20:07:29 +0000</pubDate>
		<dc:creator>Sebastian Müller</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Silex]]></category>

		<guid isPermaLink="false">http://www.sebastian-mueller.net/?p=16</guid>
		<description><![CDATA[Über das PHP Micro-Framework Silex wird zur Zeit immer häufiger Berichtet. Das auf Symfony2-Komponenten basierende Micro-Framework hat sich vieles bei dem Ruby Micro-Framework Sinatra abgeschaut, was auch völlig positiv zu bewerten ist. Denn dieses Konzept hat sich schön länger in der Ruby Community bewährt. Hier mal ein kleines Beispiel wie man Silex verwendet: Wie in [...]]]></description>
			<content:encoded><![CDATA[<p>Über das PHP Micro-Framework <a href="http://silex.sensiolabs.org" target="_blank">Silex</a> wird zur Zeit immer häufiger Berichtet. Das auf Symfony2-Komponenten basierende Micro-Framework hat sich vieles bei dem Ruby Micro-Framework <a href="http://www.sinatrarb.com/" target="_blank">Sinatra</a> abgeschaut, was auch völlig positiv zu bewerten ist. Denn dieses Konzept hat sich schön länger in der Ruby Community bewährt.<br />
<span id="more-16"></span><br />
Hier mal ein kleines Beispiel wie man Silex verwendet:</p>
<style type="text/css">


/* *************************************************** */
/* WordPress default theme "twenty-ten" compatibility: */
/* FIXME: Is there a way to limit these changes to pygmentize_GesdCy  */
/*        without editing the WordPress theme directly? */
/* *************************************************** */

#content pre {
  /* The background: transparent is needed to work with WordPress:*/
  background: transparent;
  /* Default WordPress style has a big fat <pre> margin-bottom: */
  margin-bottom: 0px;

  /*color: #333333;*/
  font-size: .9em; 
  line-height: 1.25em;
}

#content table {
}

#content table {
	border: 1px solid #e7e7e7;
    margin: 0 0 0 0;
	text-align: left;
	width: 100%;
}
#content tr th,
#content thead th {
	color: #888;
	font-size: 12px;
	font-weight: bold;
	line-height: 18px;
	padding: 0px;
}
#content tr td {
	border: 0px;
	padding: 0px;
	margin: 0px;
    margin-bottom: 0px;
    padding-bottom: 0px;

}

/* *************************************************** */
/* *************************************************** */

/* Standard fixes to the default output: */

/* Set the tab width in "ch" character units: */
.pygmentize_GesdCy .tabspan {
  display: inline-block;
  width: 4ch;
}

/* When using line numbers, use 100% table width and no cellpadding: */
.pygmentize_GesdCytable {
  width: 100%;
  border-spacing: 0px;
  border-collapse: collapse;
}


/*
#content table {
    border: 1px solid #E7E7E7;
    margin: 0 -1px 24px 0;
    text-align: left;
    width: 100%;
}
*/

.pygmentize_GesdCytable td, .pygmentize_GesdCytable th {
  padding: 0px;
  margin: 0px;
}

/* Add a little buffer so the monotype font doesn't bump directly against the edge: */
.pygmentize_GesdCy pre {
  padding: .6ch;
  color: #F8F8F2;
}

/* This is more consistent with <p> tags... I didn't like it for my use: */
/*
div .pygmentize_GesdCy {
    margin-bottom: 24px; 
}
*/

td.linenos.pygmentize_GesdCy {
  width: 1ch;
  padding: .6ch;
  line-height: 1.25em;
}

.pygmentize_GesdCy td {
  padding-right: 1px;
}


td.linenos { background-color: #f0f0f0; padding-right: 1px; }
span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
pre { line-height: 125%; }
.pygmentize_GesdCy .hll { background-color: #49483e }
.pygmentize_GesdCy  { background: #272822; color: #f8f8f2 }
.pygmentize_GesdCy .c { color: #75715e } /* Comment */
.pygmentize_GesdCy .err { color: #960050; background-color: #1e0010 } /* Error */
.pygmentize_GesdCy .k { color: #66d9ef } /* Keyword */
.pygmentize_GesdCy .l { color: #ae81ff } /* Literal */
.pygmentize_GesdCy .n { color: #f8f8f2 } /* Name */
.pygmentize_GesdCy .o { color: #f92672 } /* Operator */
.pygmentize_GesdCy .p { color: #f8f8f2 } /* Punctuation */
.pygmentize_GesdCy .cm { color: #75715e } /* Comment.Multiline */
.pygmentize_GesdCy .cp { color: #75715e } /* Comment.Preproc */
.pygmentize_GesdCy .c1 { color: #75715e } /* Comment.Single */
.pygmentize_GesdCy .cs { color: #75715e } /* Comment.Special */
.pygmentize_GesdCy .ge { font-style: italic } /* Generic.Emph */
.pygmentize_GesdCy .gs { font-weight: bold } /* Generic.Strong */
.pygmentize_GesdCy .kc { color: #66d9ef } /* Keyword.Constant */
.pygmentize_GesdCy .kd { color: #66d9ef } /* Keyword.Declaration */
.pygmentize_GesdCy .kn { color: #f92672 } /* Keyword.Namespace */
.pygmentize_GesdCy .kp { color: #66d9ef } /* Keyword.Pseudo */
.pygmentize_GesdCy .kr { color: #66d9ef } /* Keyword.Reserved */
.pygmentize_GesdCy .kt { color: #66d9ef } /* Keyword.Type */
.pygmentize_GesdCy .ld { color: #e6db74 } /* Literal.Date */
.pygmentize_GesdCy .m { color: #ae81ff } /* Literal.Number */
.pygmentize_GesdCy .s { color: #e6db74 } /* Literal.String */
.pygmentize_GesdCy .na { color: #a6e22e } /* Name.Attribute */
.pygmentize_GesdCy .nb { color: #f8f8f2 } /* Name.Builtin */
.pygmentize_GesdCy .nc { color: #a6e22e } /* Name.Class */
.pygmentize_GesdCy .no { color: #66d9ef } /* Name.Constant */
.pygmentize_GesdCy .nd { color: #a6e22e } /* Name.Decorator */
.pygmentize_GesdCy .ni { color: #f8f8f2 } /* Name.Entity */
.pygmentize_GesdCy .ne { color: #a6e22e } /* Name.Exception */
.pygmentize_GesdCy .nf { color: #a6e22e } /* Name.Function */
.pygmentize_GesdCy .nl { color: #f8f8f2 } /* Name.Label */
.pygmentize_GesdCy .nn { color: #f8f8f2 } /* Name.Namespace */
.pygmentize_GesdCy .nx { color: #a6e22e } /* Name.Other */
.pygmentize_GesdCy .py { color: #f8f8f2 } /* Name.Property */
.pygmentize_GesdCy .nt { color: #f92672 } /* Name.Tag */
.pygmentize_GesdCy .nv { color: #f8f8f2 } /* Name.Variable */
.pygmentize_GesdCy .ow { color: #f92672 } /* Operator.Word */
.pygmentize_GesdCy .w { color: #f8f8f2 } /* Text.Whitespace */
.pygmentize_GesdCy .mf { color: #ae81ff } /* Literal.Number.Float */
.pygmentize_GesdCy .mh { color: #ae81ff } /* Literal.Number.Hex */
.pygmentize_GesdCy .mi { color: #ae81ff } /* Literal.Number.Integer */
.pygmentize_GesdCy .mo { color: #ae81ff } /* Literal.Number.Oct */
.pygmentize_GesdCy .sb { color: #e6db74 } /* Literal.String.Backtick */
.pygmentize_GesdCy .sc { color: #e6db74 } /* Literal.String.Char */
.pygmentize_GesdCy .sd { color: #e6db74 } /* Literal.String.Doc */
.pygmentize_GesdCy .s2 { color: #e6db74 } /* Literal.String.Double */
.pygmentize_GesdCy .se { color: #ae81ff } /* Literal.String.Escape */
.pygmentize_GesdCy .sh { color: #e6db74 } /* Literal.String.Heredoc */
.pygmentize_GesdCy .si { color: #e6db74 } /* Literal.String.Interpol */
.pygmentize_GesdCy .sx { color: #e6db74 } /* Literal.String.Other */
.pygmentize_GesdCy .sr { color: #e6db74 } /* Literal.String.Regex */
.pygmentize_GesdCy .s1 { color: #e6db74 } /* Literal.String.Single */
.pygmentize_GesdCy .ss { color: #e6db74 } /* Literal.String.Symbol */
.pygmentize_GesdCy .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.pygmentize_GesdCy .vc { color: #f8f8f2 } /* Name.Variable.Class */
.pygmentize_GesdCy .vg { color: #f8f8f2 } /* Name.Variable.Global */
.pygmentize_GesdCy .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.pygmentize_GesdCy .il { color: #ae81ff } /* Literal.Number.Integer.Long */

  </style>




<div class="pygmentize_GesdCy"><pre><span class="cp">&lt;?php</span>
<span class="c1">// Einbindung des Frameworks mit Hilfe einer Phar-Datei </span>
<span class="k">require_once</span> <span class="nx">__DIR__</span><span class="o">.</span><span class="s1">&#39;/silex.phar&#39;</span><span class="p">;</span>

<span class="c1">// Application erzeugen </span>
<span class="nv">$app</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Silex</span><span class="err">\</span><span class="nx">Application</span><span class="p">();</span>

<span class="c1">// die startseite</span>
<span class="nv">$app</span><span class="o">-&gt;</span><span class="na">get</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">,</span> <span class="nx">function</span><span class="p">()</span> <span class="nx">use</span> <span class="p">(</span><span class="nv">$app</span><span class="p">)</span> <span class="p">{</span>
   <span class="c1">// der code für die startseite</span>
<span class="p">});</span>

<span class="c1">// eine Kontaktseite die über /contact aufrufbar wäre</span>
<span class="nv">$app</span><span class="o">-&gt;</span><span class="na">get</span><span class="p">(</span><span class="s1">&#39;/contact&#39;</span><span class="p">,</span> <span class="nx">function</span><span class="p">()</span> <span class="nx">use</span> <span class="p">(</span><span class="nv">$app</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// der eigentliche code für diese seite...</span>
<span class="p">});</span>

<span class="c1">// app ausführen</span>
<span class="nv">$app</span><span class="o">-&gt;</span><span class="na">run</span><span class="p">();</span>

<span class="cp">?&gt;</span>
</pre></div>


<p>Wie in dem Beispiel zu sehen kann man sehr schnell und einfach Unterseiten erstellen. Das Prinzip sollte jedem Programmierer schnell klar werden. Doch es sollten einige Dinge gut durchdacht werden, bevor man auf ein Micro-Framework wie Silex setzt.</p>
<h3>Wann es Sinn macht Silex einzusetzen</h3>
<p>Micro-Frameworks sollte man immer nur dann einsetzen, wenn es sich grundsätzlich um ein <strong>kleines Projekt</strong> handelt und man zu 100% weiß, dass es auch <strong>ein kleines Projekt bleibt</strong> <img src='http://www.sebastian-mueller.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Denn häufig ist es schwer abzuschätzen, ob ein Projekt nicht doch irgendwann total aufgebohrt wird und der ursprüngliche Umfang um ein Vielfaches überschritten wird. In diesem Fall kommen die Micro-Frameworks an ihre Grenzen und die Wartbarkeit der Projekte wird deutlich erschwert.</p>
<p>Wenn diesen Punkten nichts im Wege steht, ist Silex oft sehr gut einzusetzen. Einige Anwendungsbeispiele wären:</p>
<ul>
<li>Kleine APIs</li>
<li>Kleine Seitenprojekte einer großen Anwendung, die klar einem bestimmten Bereich zugeordnet werden können</li>
<li>Prototyp-Entwicklung</li>
</ul>
<h3>Eine gute Projektstruktur für Silex Projekte finden</h3>
<p>Sehr wichtig in jedem PHP-Projekt ist die Struktur. Und besonders beim Einsatz von Silex kann die Projektstruktur schnell vernachlässigt werden, weil es so schnell möglich ist eine Applikation umzusetzen. Für mich hat sich bereits mehrmals diese Struktur bewährt:</p>
<ul>
<li>
<em>/app</em><br /> Beinhaltet die eigentliche Application</p>
<ul>
<li><em>/cache</em><br />Hier ist Platz für Cache-Files</li>
<li><em>/logs</em><br />Alle Log-Dateien</li>
<li><em>app.php</em><br />Beinhaltet die Programmlogik</li>
</li>
<li><em>bootstrap.php</em><br /> Autolading, Registrierung von Services, Laden der Silex Phar-Datei</li>
</ul>
</li>
<li><em>/src</em><br /> Bibliotheken, die für das Projekt entwickelt wurden</li>
<li><em>/vendor</em><br />Alle Fremdbibliotheken sind hier enthalten, die im Projekt verwendet werden</li>
<li><em>/web</em><br />Enthält alle öffentlichen Dateien wie Scripts, Stylesheets, etc.
<ul>
<li><em>index.php</em><br />führt letztendlich die App aus mit <em>$app->run();</em> die in <em>/app/app.php</em> definiert wurde.
</ul>
</li>
</ul>
<p>Mit dieser Grundstruktur ist meiner Meinung schon ein großer Schritt zu einer sauber entwickelten App gemacht. Doch wie die App letztendlich programmiert wird, ist noch mal ein ganz anderes Thema <img src='http://www.sebastian-mueller.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastian-mueller.net/silex-sinnvoll-einsetzen-eine-kleine-einfuhrung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nice Coffeescript Introduction Tutorial</title>
		<link>http://www.sebastian-mueller.net/coffeescript-introduction-tutorial/</link>
		<comments>http://www.sebastian-mueller.net/coffeescript-introduction-tutorial/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 14:00:33 +0000</pubDate>
		<dc:creator>Sebastian Müller</dc:creator>
				<category><![CDATA[Coffeescript]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.sebastian-mueller.net/?p=11</guid>
		<description><![CDATA[Wer anfangen möchte sich mit Coffeescript zu beschäftigen, sollte sich das Video reinziehen. Es ist eine gute Einführung in die ganze Thematik.]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/18429839?title=0&amp;byline=0&amp;portrait=0" width="540" height="405" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>Wer anfangen möchte sich mit Coffeescript zu beschäftigen, sollte sich das Video reinziehen. Es ist eine gute Einführung in die ganze Thematik.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastian-mueller.net/coffeescript-introduction-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

