2014年12月18日 星期四

Laravel database 用法

其實也不一定要用laravel內的作法來建立資料表
但是用了好幾個好處,你可以快速的重建你的db,恢復,以及初始化資料表內容更彈性。

我用的到的也不多,就以下這幾句
php artisan migrate:make create_users_table//建立一支migrate檔
php artisan migrate//執行資料夾裡所有的migrate檔(建立
php artisan migrate:reset//執行資料夾裡所有的migrate檔(清除
php artisan db:seed//餵資料表資料

範例:以產生一個表的資料來說~
php artisan migrate:make create_users_table
會產生一支檔案 如:2014_12_17_213725_create_users_table.php
在/app/database/migrations/底下
裡面會有up跟down 2個function,
up是執行php artisan migrate時用的,down 是php artisan migrate:reset時用的
up裡寫上建表的script
// Creates the users table
        Schema::create('users', function($table)
        {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->string('username');
            $table->string('email');
            $table->string('password');
            $table->string('confirmation_code');
            $table->string('remember_token')->nullable();
            $table->boolean('confirmed')->default(false);
            $table->timestamps();
        });
down裡寫上清除的script
        Schema::drop('users');

接著執行 php artisan migrate就會建立新表了,執行php artisan migrate:reset又會清掉這張表

在/app/database/seeds/底下 有一支DatabaseSeeder.php
在裡面寫上要呼叫seed的檔案 如
Eloquent::unguard();

        // Add calls to Seeders here
        $this->call('UsersTableSeeder');

這支UsersTableSeeder放在同一層
class UsersTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->truncate();
        //DB::table('users')->delete();

        $users = array(
            array(
                'username'      => 'admin',
                'email'      => 'admin@test.org',
                'password'   => Hash::make('admin'),
                'confirmed'   => 1,
                'confirmation_code' => md5(microtime().Config::get('app.key')),
                'created_at' => new DateTime,
                'updated_at' => new DateTime,
            )
        );

        DB::table('users')->insert( $users );
    }

}
接著執行php artisan db:seed 就會餵資料進去了
使用DB::table('users')->truncate();會使auto_increment的值清空
DB::table('users')->delete();則不會。

//以下是unique跟foreign的用法
$table->unique(array('ad_id','ad_groups_id'));//將這2個鍵共設為unique
$table->foreign('ad_id')->references('id')->on('ads')->onDelete('cascade');//將本表的ad_id參考到ads表的id,當delete的時候。

參考資料來源
http://laravel.com/docs/4.2/migrations

2014年12月17日 星期三

Laravel 教學 db取值 分頁顯示

範例結果會長的像這樣↑

db的取值在laravel裡真的是一個神奇...
db取值在laravel有一個非常簡單的方法
在model資料夾裡開一個class,class的名稱是 Menu,就會對應到DB裡的 menus表,會把classname先轉小寫,再加一個s去對,所以你那個class就可以參考到menus的表了,也就是你db表一定要有個s在最後面才能用這招。class的寫法也很簡單 除了檔名跟class名要相同之外。
※但假如你用news(新聞)當model的話,這時候,就不能這麼幹了。因為他轉出來的表名稱會叫做news...不會叫newss
<?php
class Menu extends Eloquent {}
?>寫一句這個就行了

※laravel的流程通常是 routes->controllers->view

step1:如上所說,在model資料夾裡建一支Menu.php模型
<?php
class Menu extends Eloquent {}
?>


step2:在routes.php裡加上一行
Route::get('menu', 'HomeController@myMenu');

這的意思是用HomeController.php裡的myMenu這個function做事
沒有這支Controller就建一支(預設範本就有)

step3:開始寫public function myMenu()的code

到此為止,你已經可以使用Menu 這個class了,而你只是把他加入model的資料夾裡並且繼承了Eloquent
那你可以做什麼?
$menus = Menu::all();  //把db裡所有的資料倒出來!
View::make('menu', compact('menus'));//傳給menu的view,資料是menus(為什麼這裡是字串格式)

接著你在menu.php(這支放在view資料夾下)就可以直接參考到$menus這個變數了!!你可以簡單的用print_r把他們列出來。

那 怎麼做分頁顯示呢?
在api(http://laravel.com/api/4.2/)有一個叫paginate的方法,
你可以這樣用
$_menu=new Menu();
$menus=$_menu->paginate(2);//要怎麼預處理這個資料,order什麼的可以在分頁前做
View::make('menu', compact('menus'));
這樣就完成了
你會看到在頁面上,只會出現2筆資料,加上?page=2,就會出現第二頁的資料
<?php
foreach ($menus as $key => $value) {
echo $value['name']."</br>";
}
?>
{{ $menus->links() }}
在下面加上{{ $menus->links() }},還會出現頁次選單...(真的是很無微不至的laravel啊!)

2014年12月9日 星期二

windows底下裝virtualbox跑centos7 並安裝 laravel

.在virtual box上安裝CentOS-7.0-1406-x86_64-Minimal.iso
.安裝完後關掉虛擬機,重開登入後,先查ip,安裝#yum install net-tool,之後#ifconfig ,記下這台虛擬機的ip
.關掉虛擬機,並用VBoxManage.exe startvm "centos" --type headless 重新打開虛擬機 裡面的centos 是你虛擬機的名稱,這樣做可以讓虛擬機在背景跑。
.使用putty,連上虛擬機,安裝常用套件 yum install -y denyhosts rdate sudo wget man mlocate vim unzip lsof
.更新yum ,#yum update
.安裝nginx
#sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
#sudo yum install nginx
.把80 port打開,/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
.啟動nginx #sudo systemctl start nginx.service
.試著連連看 ip 能不能打開nginx的welcome頁面
.#sudo systemctl enable nginx.service 加入開機執行
.安裝mysql db (安裝中的問題可以參考這篇 http://www.orztw.com/2014/02/install-mariadb-on-centos.html)
#sudo yum install mariadb-server mariadb
#sudo systemctl start mariadb
#sudo mysqladmin -u root password 'your-password'
.安裝php
#sudo yum install php php-mysql php-fpm

#sudo vi /etc/php.ini 把;cgi.fix_pathinfo=1的;拿掉後面改成0 cgi.fix_pathinfo=0

#sudo vi /etc/php-fpm.d/www.conf


修改listen = /var/run/php-fpm/php-fpm.sock

#sudo systemctl start php-fpm


#sudo systemctl enable php-fpm.service

修改nginx conf #sudo vi /etc/nginx/conf.d/default.conf


server {
    listen       80;
    server_name  server_domain_name_or_IP;

    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

#sudo systemctl restart nginx

web root在/usr/share/nginx/html/

安裝phpmyadmin(https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-with-nginx-on-a-centos-7-server)

sudo yum install epel-release(這裡面有mcrypt)

sudo yum install phpmyadmin

sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html

sudo systemctl restart php-fpm

http://your/phpMyAdmin/

安裝laravel,先安裝composer

下載->#sudo curl -sS https://getcomposer.org/installer | sudo php

移到bin底下->#mv composer.phar /usr/local/bin/composer
try-> #composer

安裝laravel

#composer global require "laravel/installer=~1.1"

找個好目錄執行
composer create-project laravel/laravel your-project-name --prefer-dist

把新增的專案裡的

app/storage 設定可寫權限

進入專案,執行 #php artisan serve --host 你的ip --port 你的port

port如果設80會跟ngiinx相衝,關掉nginx的就可以了

之後就可以在外部連上去看結果了。


※假如你直接使用#php artisan serve,他應該是顯示 http://localhost:8000/
這在虛擬機裡是連的到的,但在外面就連不到了 因為你外面的localhost是指向127.0.0.1









2014年12月3日 星期三

AMS 5 install ON centsos 7 on virtualbox

※adobe media server 原名fms,5.0後改叫ams
1.安裝好virtualbox
2.下載centos7 iso,http://ftp.nsysu.edu.tw/CentOS/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-Minimal.iso
3.安裝centos7
4.設定網路橋接器 才可以拿到ip
5.centos Minimal版沒有ifconfig,要自已裝   #yum install net-tool,裝好之後拿到ip記下來。
6.安裝一些套件 yum install denyhosts rdate sudo wget man mlocate
7.更新套件 yum update
8.下載ams,解壓,安裝 #sudo ./installAMS
9.安裝途中設定的帳密要記下來 等等登入控制台會用到(4.5版會設80.1935的port,因為會跟apache相衝所以只設1935,但5.0版不會設80,所以免了)
10.安裝完後可以到 /opt/adobe/ams 執行 #./amsmgr adminserver start
11.接著把centos的port打開讓外面連的進來,我是直接把防火牆關了,#systemctl stop firewalld
12.done,接著你就能在外面的browser上輸入centos的ip,就可以看到ams的index畫面了~

※建議用putty操作比較快~
※執行vbox時,可以用VBoxManage.exe startvm "centos" --type headless 的指令,讓centos跑在背景,再用putty去操作。在vbox上的centos不好操作啊...
※fyi 實作上,防火牆不能關,但要開1935的rtmp協定 的 port
※要登入控制台 80跟1111都要開
#firewall-cmd --zone=public --add-port=1111/tcp --permanent
#firewall-cmd --reload




參考:
ams cmdline:
http://help.adobe.com/en_US/adobemediaserver/configadmin/WS5b3ccc516d4fbf351e63e3d119f29261b7-7fe7.2.3.html

補充下,安裝過程序號可以跳過,若已安裝nginx或apache,就不用選安裝apache,也不會讓你填80port,安裝完後把webroot資料夾移到你的 網頁根目錄 底下就行了