元スレsymfony PHPフレームワークpart2
php覧 / PC版 /みんなの評価 :
251 = :
さんくす!
252 = :
sfDoctrineGuardPlugin使ってます。
バックエンドで、is_super_adminなアカウントだけ閲覧を許可していんですけど
以下のsecurity.ymlでうまくいきません。クレデンシャルが違うんでしょうか?
index:
is_secure: true
credentials: admin
それと、新規登録時に
Notice: Undefined offset: 1 in D:\MyProject\symfony\lib\vendor\symfony\lib\config\sfGeneratorConfigHandler.class.php on line 68
という謎のエラーが出てしまいます。
sfGuardAuthに空のgenerator.ymlを作ると治るという情報があったのですが
治りませんでした。他に解決方法はありませんでしょうか?
255 = :
日別のアクセス数を集計しようとしてるのですが、正常にうごきません。
日付の比較がおかしくなっている感じがします。
スキーマはこんな感じです。
AccessLog:
tableName: access_log
actAs: { Timestampable: ~ }
columns:
user_id: varchar(50)
256 = :
コードと同等(と思っている)のSQLをMySqlコマンドラインから実行すると、正常にいきます。
SELECT a.id, a.user_id, COUNT(*), DATE(a.created_at) AS date
FROM access_log a
WHERE (a.user_id = 'admin' AND a.created_at > '2010-11-01 00:00:00' AND a.created_at < '2010-11-29 23:59:59')
GROUP BY date ORDER BY a.created_at;
「->andWhere('a.created_at < ?',$end)」の行を抜かすと一応取得はできます。
原因はなんでしょうか?
$id = 'admin';
$start = "'2011-11-01 00:00:00'";
$end ="'2011-11-30 23:59:59'";
$this->accesslogs = Doctrine_Query::create()
->select('a.user_id, count(*) as count, DATE(a.created_at) as date')
->from('accesslog as a')
->where('a.user_id = ?',$id)
->andWhere('a.created_at > ?',$start)
->andWhere('a.created_at < ?',$end)
->groupBy('date')
->orderBy('a.created_at')
->execute();
257 = :
ついでにfixture.ymlも書いておきます。
AccessLog:
log1:
user_id: admin
created_at: '2010-11-13 21:56:54'
log2:
user_id: admin
created_at: '2010-11-13 21:56:54'
log3:
user_id: admin
created_at: '2010-11-14 21:56:54'
log4:
user_id: admin
created_at: '2010-11-14 21:56:54'
log5:
user_id: admin
created_at: '2010-11-15 21:56:54'
258 = :
(たぶん)解決しました。
->from('accesslog as a')
じゃなくて
->from('accesslog a')
に変えると期待通りに動きました^^;
夜中3時間悩んだのに、昼に起きて5分で解決しました。
休憩や睡眠って大事ですね。みなさんもがんばってください。
なんで$endの行が無いときにうまくいったかは謎のままですが。。。
259 = :
sfDoctrineGuardPluginって使ってる人いる??
symfony慣れてないくせして導入してみたんだけど、symfonyとバージョン合ってないのかな?
sfGuardRememberMeFilterが機能してない気がする。
settings.ymlで
enabled_modules: [default, sfGuardGroup, sfGuardUser, sfGuardPermission, sfGuardAuth, sfGuardForgotPassword]
を記述しても、バックエンドに追加されてない。
sfGuardUserは手動でバックエンドに追加できるけど、sfGuardPermissionは足りないファイルがたんまり。ネットで拾ってきてもまともに動かない。
あと、save-fixtureしてリロードすると、パスワードがハッシュされてログインできなくなる。
このあたり、どうにかなりませんか?
261 = :
これ、どうゆう意味ですか?
> 500 | Internal Server Error | Doctrine_Query_Exception
> The root class of the query (alias s) must have at least one field selected.
ユーザー毎の売上げを集計したいだけなんだけど。。。
#action.php
public function executeSalelist(sfWebRequest $request)
{
$this->saless = Doctrine_Query::create()
->select('s.user_id as id, p.name, sum(s.amount) as amount')
->from('Sales s')
->leftJoin('s.Profile p')
->groupBy('id')
->execute();
}
262 = :
#schema.yml
Sales:
tableName: sales
actAs: { Timestampable: ~ }
columns:
user_id:
type: integer
amount: integer
relations:
User:
class: sfGuardUser
foreign: id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
Profile:
class: sfGuardUserProfile
foreign: user_id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
263 = :
sfGuardPluginついでに。
> $this->setWidget('user_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('User'))));
フォームのプルダウンでuser_id=0のアカウントを選択してポストすると、
user_id=1として格納されてしまいます。
なんで~??
265 = :
selectからp.nameをとるととりあえずいける。
Profileがおかしいのかな?
Sales:
tableName: sales
actAs: { Timestampable: ~ }
columns:
user_id:
type: integer
amount: integer
relations:
User:
class: sfGuardUser
foreign: id
local: use_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
Profile:
class: sfGuardUserProfile
foreign: user_id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Profile
266 = :
sfGuardUserProfile:
tableName: sf_guard_user_profile
actAs: { Timestampable: ~ }
columns:
id: integer
user_id:
type: integer
primary: true
bank_name: varchar(50)
bank_point: varchar(50)
bank_type:
type: enum
values: [ordinary, current]
default: ordinary
name: varchar(50)
bank_number: varchar(50)
relations:
User:
class: sfGuardUser
foreign: id
local: user_id
type: one
onDelete: cascade
foreignType: one
foreignAlias: Profile
267 = :
フォーム難しいですね。。。
スキーマでは user_id(type:integer) にリレーションしてるんだけど、
フォームでは user_name(type:varchar(255)) で入力したい場合はどうすればいいですか?
268 = :
Newのときは下記コードでうまく「ユーザー名入力→ユーザーIDに変換」できるようになったんですが、
Editのとき編集フォームがuser_idのままです。。。
public function configure()
{
$this->widgetSchema['user_id'] = new sfWidgetFormInputText();
$this->setValidator('user_id', new sfValidatorString(array('max_length' => 128, 'required' => true)));
$this->validatorSchema->setPostValidator(new sfValidatorCallback(
array(
'callback' => array($this, 'validateUsername'),
),
array(
'invalid' => 'アカウント名を正しく入力してください。',
)
));
}
269 = :
public function validateUsername(sfValidatorBase $validator, $values)
{
if (strlen($values['user_id']))
{
$user = Doctrine_Core::getTable('User')->findOneByUsername($values['user_id']);
if (!$user)
{
throw new sfValidatorError($validator, 'invalid');
}
$values['user_id'] = $user->getId();
}
return $values;
}
}
270 = :
コンストラクタ上書きでできたけど、上記含めてお作法的にこれでいいんかな。。。
271 = :
このスレにはお世話になってるし、
だれかの役に立つかもしれないから、動いたコンストラクタのコードも一応書いときます。
けんちゃんより(はぁと)
public function __construct($defaults = array(), $options = array(), $CSRFSecret = null)
{
if(isset($defaults['user_id']))
{
$user = Doctrine_Core::getTable('User')->find($defaults['user_id']);
if($user)
{
$defaults['user_id'] = $user->getUsername();
}
}
parent::__construct($defaults, $options, $CSRFSecret);
}
272 = :
他システムへのアクセスがあったときに、タスクを用いてSymfony側にアクセスログを取ろうとしています。
実行すると「There is no open connection」というエラーが出てしまいます。
なにがおかしいんでしょうか?
> $databaseManager = new sfDatabaseManager($this->configuration);
> $connection = $databaseManager->getDatabase('links')->getConnection();
を追加してみたのですが、
「 Database "links" does not exist.」
というエラーが出てしまいます。これは正しいDB名です。
273 = :
C:\MyProject\link>php symfony link:access user01 111.111.111.111
#accessTask.class.php
<?php
class accessTask extends sfBaseTask
{
public function configure()
{
$this->namespace = 'link';
$this->name = 'access';
$this->addArgument('username', sfCommandArgument::OPTIONAL);
$this->addArgument('ip', sfCommandArgument::OPTIONAL);
}
public function execute($arguments = array(), $options = array())
{
$access = new Accesslog();
$access->setUsername($arguments['username']);
$access->setIp($arguments['ip']);
$access->save();
$this->log('access from '. $arguments['ip']);
}
}
274 = :
>>273
・extends sfDoctrineBaseTaskにする
・executeの冒頭に
$configuration = $this->createConfiguration('users', 'cli');
new sfDatabaseManager($this->configuration);
と書く。
理屈は知らんがw
doctrineならこれで動くんじゃね
276 = :
できた~!
しっかし重いなぁ。。。
まだ連動させてないけど、Doctrineがログ吐くのが悪さしないといいんだけど。
(-quiet指定したら、"-u","-i","-e"オプションが無いとエラーが出たのであとで調べる。)
277 = :
マイグレーションについてなんですけど、
カラムの追加は公式ドキュメントでなんとなく分かりました。
ただ、テーブル(既存テーブルとのリレーション有り)を新たに追加する場合は
どうすればよいのでしょうか?
Symfonyが吐いたテーブル作成のSQL文をコピペしてprod環境で実行、
モデル等のファイルをアップロード、
キャッシュクリア
というような手作業になるのでしょうか?
ビルドはいらないですよね?
278 = :
http://localhost/example/web/index.php → http://localhost/example/
にするのはhttpd.cnfをいじるんかねえ?チラ)
279 = :
まだあまりsymfonyを理解していないのですが、
symfony doctrine:build --all --and-load
すると、まずデータベースがdropされますよね?
複数プロジェクトで共通のユーザー情報マスタDBを使うつもりでいるので
1つのプロジェクトを更新するたびにユーザー情報がdropされると困るのですが、
どのように構成すればよいでしょうか?
#仮にユーザー情報マスタDBのスキーマだけを持ったプロジェクトを作って、
#ほかのプロジェクトはユーザー情報DBをスキーマに記述しない構成も考えたのですが、
#モデル等が作られないのでリレーション等が働かない気がしています。
281 = :
初心者のくせにサーバでsymfony運用始めちゃったんですけど、
新しいテーブル追加するにはどうすればいいですか??
サーバでbuild-allするとdropしちゃいますよね?
一旦save-fixtureすることも考えたんですが
sfGuardPluginなんで、パスワードが変わっちゃいますよね?;;
282 = :
>>281
build-allじゃなくて必要なタスクだけ実行すればいいんじゃないの?
やり方は色々あると思うけど
例えば新しいテーブルはSQLで作って
symfony --xml build-schema
symfony build --model
symfony build --forms
symfony cc
とか。
283 :
遅くなりました。
ちょっとそれでやってみることにします。
284 = :
駄目フレームワークの典型symfony
だから誰も使わないし流行らない。
285 = :
2.0で大きく変わるんだから、自身で悪い点は分かってるんだろうよ。
フレームワークは所詮道具なんで、どれを使ってもいくつも使ってもいいと思う。
ケースバイケース、適材適所で。
1個覚えれば他に移行するのも楽だよ。
俺はsymfonyともPHPとも心中する気は無いけど、
それでも、今現在の最善策だと思って使ってく。
5年も経てば、CakeでもZendでもない新しいフレームワークにみんな移ってると思うよ。
そんな気持ち。
289 = :
2.0のチュートリアル等の日本語化は誰がやるか決まってるの?
290 = :
>>289
symfonyユーザー会で分担してやるんじゃね?やる気があるならユーザー会へ立候補どぞー
291 = :
チュートリアルやってみたけどSubversion導入するところでめんどくさくなって挫折した。
292 = :
>>284
まぁお前が無知だから使われてること知らないだけだけどな
295 = 294 :
>>289
主だった人は執筆やら勉強の会の準備に忙しいから、
296 = 294 :
>>295 のつづき。すぐに翻訳はそろわないと思うよ。ただ、コードサンプルはわかりやすいから、英語が読めなくても内容をかなりつかめるんじゃないかな。
297 = 294 :
>>284
ガラパゴス基準で考えてほしくないな。github のウォッチングランキングに入っているのでじゅうぶん人気はあると思うよ。
http://github.com/popular/watched
298 = :
VPSも安くなったし、もう無理してPHP使う必要無い時代になったな。
299 = 294 :
>>298
パフォーマンスの問題というよりも、PHPでは体験できない新しい勉強をしたいということではないだろうか。世界の状況はどんどん変わってゆくのだから、>>285 と同じことだけど特定のフレームワークや言語に囚われる必然性はないよ。
300 = :
シンプルとはいえない
みんなの評価 :
類似してるかもしれないスレッド
- [PHPフレームワーク]Laravel (995) - [60%] - 2017/7/22 11:45
- 【PHP】フレームワーク Akelos (129) - [51%] - 2019/5/9 7:46
- 【PHP】フレームワークPharonスレ (306) - [46%] - 2022/10/10 20:00
- 【PHP】PHPフレームワーク総合スレ14 (1001) - [45%] - 2010/12/11 10:32
- 【PHP】PHPフレームワーク総合スレ15 (989) - [45%] - 2013/9/27 6:00 △
- [PHP][フレームワーク]CodeIgniter Part2 (983) - [41%] - 2015/4/7 12:46
トップメニューへ / →のくす牧場書庫について