<?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>pamiętnik programisty &#187; zend framework</title>
	<atom:link href="http://piotr.doniec.eu/devlog/tag/zend-framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://piotr.doniec.eu/devlog</link>
	<description></description>
	<lastBuildDate>Thu, 05 Aug 2010 20:22:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Zend_Auth i Doctrine</title>
		<link>http://piotr.doniec.eu/devlog/2009/04/zend_auth-i-doctrine/</link>
		<comments>http://piotr.doniec.eu/devlog/2009/04/zend_auth-i-doctrine/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 09:38:42 +0000</pubDate>
		<dc:creator>pejotr</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://piotr.doniec.eu/devlog/?p=166</guid>
		<description><![CDATA[O łączeniu frameworku Zenda z ORM Doctrine wiele w internecie napisano. Ale trzeba pamiętać że wiele bibliotek zawartych w frameworku również może wymagać połączenia z bazą danych, a domyślnie wymagają użycia Zend_Db_Table. Na szczęście taka sytuacja została przewidziana przez twórców którzy udostępnili odpowiedni zestaw interface&#8217;ów umożliwiając w ten sposób tworzenie własnych adapterów a tym samym]]></description>
			<content:encoded><![CDATA[<p>O łączeniu frameworku Zenda z ORM Doctrine wiele w internecie napisano. Ale trzeba pamiętać że wiele bibliotek zawartych w frameworku również może wymagać połączenia z bazą danych, a domyślnie wymagają użycia Zend_Db_Table. Na szczęście taka sytuacja została przewidziana przez twórców którzy udostępnili odpowiedni zestaw interface&#8217;ów umożliwiając w ten sposób tworzenie własnych adapterów a tym samym dostosowanie komponentów wedle własnych zachcianek.<span id="more-166"></span><br />
Jak połączyć Doctrine i Zend_Session napisał Zyx na swoim blogu(www.zyxist.com). W podobny sposób można podpiąć Zend_Auth, ale klasa już została napisana i można ją pobrać stąd <a href="http://http://framework.zend.com/wiki/pages/viewpage.action?pageId=3866950&#038;focusedCommentId=10944686">Zend_Auth_Adapter_Doctrine_Table</a>. Do tego miejsca wszystko jest jasne i proste, dziwi mnie za to trochę sposób używania tego w aplikacji.<br />
Zakładając że mamy prostą tabele użytkowników opisaną następująco</p>
<pre class="brush: php">
WebsiteUser:
  tableName: website_users
  columns:
    UserId:   { type: integer(8), primary: true, autoincrement: true }
    GroupId:  { type: integer(8), notnull: true  }
    Username: { type: string(255), notnull: true }
    Password: { type: string(255), notnull: true }
    Email:    { type: string(255), notnull: true }
  indexes:
    uniqueusername: { fields: [Username], type: unique }
    uniqueemail:    { fields: [Email], type: unique    }
  relations:
    WebsiteGroup: { class: RuczajGroup, local: GroupId, foreign: GroupId }
  options: { type: INNODB, collate: utf8_polish_ci, charset: utf8 }
</pre>
<p>to ustawienia nazwy tabeli i pól wygląda dość dziwnie, mianowicie nazwa tabeli nie jest faktyczną nazwą tabeli tylko czymś w rodzaju nazwy encji. Pola też należy pisać dokładnie takimi samymi literami(chodzi o wielkość) jak w pliku YAML, mimo że tworzone tabele składają się wyłącznie z małych liter. W sumie wydaje się to logiczne, ale trochę czasu mi zajęło dojście co oni tak naprawdę chcą a wyjątek typu<br />
<code>('The supplied parameters to Zend_Auth_Adapter_Doctrine_Record failed to produce a valid sql statement, please check table and column names for validity');</code> nie podpowiada zbyt wiele.</p>
<p>Poprawny kod autoryzacji wygląda zatem tak:</p>
<pre class="brush: php">
$dbConnection = Doctrine::getConnectionByTableName(&#039;website_users&#039;);
$authAdapter = new Zend_Auth_Adapter_Doctrine_Table($dbConnection);
$authAdapter-&gt;setTableName(&#039;WebsitejUser&#039;)
                  -&gt;setIdentityColumn(&#039;Username&#039;)
    		  -&gt;setCredentialColumn(&#039;Password&#039;)
		  -&gt;setCredentialTreatment(&#039;md5(?)&#039;);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://piotr.doniec.eu/devlog/2009/04/zend_auth-i-doctrine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
