Добрый день! Запутался я в ООП. Прошу помочь! Есть Core.pm Там производится подключение к БД MySQL. Код | package Core;
use strict; use warnings; use DBI; use DBD::mysql;
use lib ('/home/orbital/Pitch/lib');
my $database = "DB"; my $hostname = "127.0.0.1"; my $port = "3306"; my $user = "root"; my $password = "mysql"; my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
sub new { my $class = shift; my $self = {}; bless $self, $class; $self->{dbh} = DBI->connect($dsn,$user,$password, {RaiseError => 1,AutoCommit => 0}) or die $DBI::errstr; my $session = Core::Session->new(); my $user = Core::User->new(); return ($self , $session , $user); }; 1;
|
Есть Core::Session Там ведется работа с сессией пользователя. Привел несколько методов. Их гораздо больше. Код | use strict; use warnings; use lib ('/home/orbital/Pitch/lib');
package Core::Session;
use CGI::Cookie;
sub new { my $class= shift; my $self= {}; bless $self, $class; return $self; };
sub load_session { my $self = shift; my $session_id =_cookie(); my $data_handler = $self->{dbh}->prepare("SELECT * FROM session WHERE session_id=?"); $session_id ? $data_handler->execute($session_id) : return 0; my $loaded_session=$data_handler->fetchrow_hashref; return $loaded_session; }#//sub load_session
sub save_session { my $self= shift; my $args; @_ ? $args=@_ : $args='0'; my $generate_session_id= generate_id(); #$self->session_id({}); $self->_session($generate_session_id); my $new_session= $var->{dbh}->prepare("INSERT INTO session (session_id, data) VALUES (?,?)"); $new_session->execute ($generate_session_id, $args); return $generate_session_id; }
|
Есть Core::User В этом пакете ведется работа с учетной записью пользователя. Привел несколько методов. Их гораздо больше. Код | use strict; use warnings; use lib ('/home/orbital/Pitch/lib');
package Core::User;
sub new { my $class= shift; my $self= {}; bless $self, $class; return $self; };
sub create_user { # создание нового пользователя my $self= shift; my $params= shift; # все данные о пользователе передаются в виде ссылки на хэш, который заполняется введенными значениями в HTML странице (param) my $add_row= $self->{dbh}->prepare ("INSERT INTO users (login, password, email, user_profile) VALUES (?,?,?,?) "); $add_row->execute ($params->{login}, $params->{password}, $params->{email}, $params->{user_profile}); my $get_user_id= $self->{dbh}->{mysql_insertid}; # запрашиваем id только что созданного пользователя return $get_user_id; }#// sub create_user
sub do_login { # метод осуществляет вход пользователя my $self= shift; # следующий входной параметр (ссылка на хэш) содержит логин и пароль, введенные польлзователем в форме "авторизация" my $login_from_html = $_[0] -> {login}; my $password_from_html = $_[0] -> {password}; my $check_login_password_handler = $self -> {dbh} -> prepare("SELECT id, login, password, group FROM users WHERE login=? AND password=?"); $check_login_password_handler -> execute($login_from_html, $password_from_html); my $user_info_row = $check_login_password_handler->fetchrow_hashref; if ($user_info_row) { # пользователь с такими login, password найден my $get_session = $self->load($user_info_row); # получаем данные о сессии пользователя my $set_cookie = $self->set_cookie($get_session); # формируем cookie return $set_cookie; } else { return 0; } } #// sub login
|
Подскажите, пожалуйста, как сделать, чтобы были доступны некоторые методы из Core::Session в Core::User, и наоборот!
|