Laravel 4 系列入门教程(二)【最适合中国人的Laravel教程】

2014-10-2   /   阅读数:67941   /   分类: Laravel

向 Laravel 4 tutorial – simple website with backend – Part 2 致敬,本篇教程部分内容翻译自此文章。

每一个教程完成,我将会git commit一次。

示例代码见 https://github.com/johnlui/Learn-Laravel-4

大家在任何地方卡住,最快捷的解决方式就是去看我的示例代码。

学习进入深水区,我在本篇教程中将重点讲解视图常用规则,命名空间(重难点),和路由(难点)。


1. 视图分离与嵌套

在 learnlaravel 文件夹下运行命令:

php artisan generate:view admin._layouts.default


这时候generator插件帮我们创建了 app/views/admin/_layouts/default.blade.php 文件,将内容修改为:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Learn Laravel 4</title>

  @include('admin._partials.assets')

</head>
<body>
<div class="container">
  <div class="navbar navbar-inverse navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container">
      <a class="brand" href="{{ URL::route('admin.pages.index') }}">Learn Laravel 4</a>

      @include('admin._partials.navigation')
      
    </div>
  </div>
</div>
 
<hr>

  @yield('main')

</div>
</body>
</html>

这就是视图文件,MVC中的V。视图需要仔细讲一下。


views文件夹为视图文件夹,视图文件夹可以嵌套,就像我上面一样创建了admin/_layout嵌套文件夹,在里面创建了一个叫default.blade.php的文件,那么以后我们在Laravel内任何地方要用到这个视图的时候,他就叫admin._layouts.default。

我们看到,上面代码的第七行是“@include('admin._partials.assets')”,根据上面我们刚刚了解的知识,这表示载入了另外一个文件。blade是Laravel的模板引擎,此处的 @include 表示直接把那个文件的所有代码带入进来放到这里,变成当前视图的一部分。

注意看第25行“@yield('main')”,这表示什么呢?这个有点复杂,我们稍后再讲。


2. 权限验证

Laravel支持标准HTTP认证,但是在此处我们需要构建blog系统,所以我们将编写完善的管理员登陆系统,从页面登录。

用命令行创建 app/views/admin/auth/login.blade.php文件,代码如下:

@extends('admin._layouts.default')

@section('main')

  <div id="login" class="login">

    {{ Form::open() }}

      @if ($errors->has('login'))

        <div class="alert alert-error">{{ $errors->first('login', ':message') }}</div>
      
      @endif

      <div class="control-group">
        
        {{ Form::label('email', 'Email') }}
        
        <div class="controls">
          
          {{ Form::text('email') }}
        
        </div>
      </div>

      <div class="control-group">
        
        {{ Form::label('password', 'Password') }}
        
        <div class="controls">
          
          {{ Form::password('password') }}
        
        </div>
      </div>

      <div class="form-actions">
        
        {{ Form::submit('Login', array('class' => 'btn btn-inverse btn-login')) }}
      
      </div>

    {{ Form::close() }}
  
  </div>

@stop

大家应该注意到了前两行:

@extends('admin._layouts.default')
@section('main')

这代表什么?实际上,以后我们会了解到,在controller中调用view的时候,调用的只是这个login.blade.php文件,第一行表示,此视图是admin._layouts.default的子视图,这时blade引擎会把这个视图也载入进来,怎么组装呢?这时候下面那个@section('main')就该出场了,被它包裹的代码将会直接放到admin._layouts.default中的@yield('main')中。section和yield可以任意搭配,只要两个视图之间有调用关系,他们就可以这样用,非常灵活。


写到这里大家可能有个疑问,为什么示例代码里空行那么多?这一点就是个人经验了。blade引擎的所有标签都会在视图编译时用正则处理,引擎本身有一个问题,算不上bug,就是换行符会被处理掉,导致前后行和这一行都紧紧地挤在一起,在前端浏览器中“查看源代码”时,比较不清晰,前后加上空行可以解决这个问题。当然这可能是一个自动的“压缩”特性,不再深入讨论。


增加控制器文件app/controllers/admin/AuthController.php,这时候有人就说了,这我知道,哈哈,运行

“php artisan generate:controller admin.AuthController”

这个想法是对的,但你运行一下试试?会直接在app/controllers目录下创建一个“admin.AuthController.php”文件,有人又说,那我用“admin/AuthController”总行了吧,你试一下?也不行。所以我们要先在 app/controllers 下手动创建 admin 文件夹,这时候,再命令行输入:

php artisan generate:controller admin/AuthController

这样就可以了。接下来改写 AuthController.php 的内容为:

<?php

namespace App\Controllers\Admin;

use Auth, BaseController, Form, Input, Redirect, Sentry, View;

class AuthController extends BaseController {

  /**
   * 显示登录页面
   * @return View
   */
  public function getLogin()
  {
    return View::make('admin.auth.login');
  }

  /**
   * POST 登录验证
   * @return Redirect
   */
  public function postLogin()
  {
    $credentials = array(
      'email'    => Input::get('email'),
      'password' => Input::get('password')
    );

    try
    {
      $user = Sentry::authenticate($credentials, false);

      if ($user)
      {
        return Redirect::route('admin.pages.index');
      }
    }
    catch(\Exception $e)
    {
      return Redirect::route('admin.login')->withErrors(array('login' => $e->getMessage()));
    }
  }

  /**
   * 注销
   * @return Redirect
   */
  public function getLogout()
  {
    Sentry::logout();

    return Redirect::route('admin.login');
  }

}

这就是我们登录、注销的控制器,MVC中的C。接下来我将讲解命名空间,这是Laravel的基础,或者说是composer的基础,是整个Laravel教程中的重点、难点,希望大家锱铢必较,任何不懂都不要放过。可以到phphub论坛或者golaravel论坛相应帖子下面提问,或者直接发帖提问。


我们首先观察这个文件的位置,它位于 app/controllers/admin  目录下,这有什么不同呢?在其他框架如 CI 中,子文件夹直接加上文件夹名就可以直接调用到了,虽然最多只能有一层。而Laravel没有这么简单,涉及到了PHP的命名空间。


1. composer 支持 PSR-0 及 PSR-4 标准,标准规定 PHP 包以命名空间为区分,向外提供服务,所有暴露出来的类都应该在 \作者名\包名 命名空间下,例如 \lui\MFFC\Mail 类。这样,哪怕是名称一样的包只要是不同作者也可以在 https://packagist.org/ 上共存,供大家使用。

2. 命名空间可以类比成 Linux 系统中的 目录,在任何目录下都可以直接使用文件名打开当前目录下的所有文件和可执行程序,如果需要打开其他目录下的文件,就需要使用绝对路径或者相对路径。

3. 大家可能在许多其他教程中见到过controller头部没有 namesapce 申明,更没有那一堆的 use xxx,像这个文件 https://github.com/cecoo/laravel4demo/blob/master/app/controllers /BlogController.php。这个文件在第8行直接使用了 Blog 这个类,这是为什么呢?

因为他们都已经在 learnlaravel 这个 composer 应用的配置文件中声明为自动加载了,而他们没有在顶部声明他们所在的命名空间,这样就会被自动加为顶级命名空间。这个配置文件是 composer.json,对象配置项为autoload 下的 classmap 项。这个声明会让 Composer 在生成自动载入文件的时候,自动扫描该文件下所有的类以及所有子文件夹中的类,只要没有声明特定的命名空间,将会被自动加载为顶级空间。【之前表述有误,特此更正!】

关于命名空间更多详情,可以参考 【PHP 命名空间 入门】


OK,到目前为止我们的MVC三元素已经集齐了,那接下来该做什么了呢?配置路由。这里的路由并不是家里用的无线路由 :-D,而是 用户请求的URL到控制器某个方法的转换,function是PHP中代码段的最小单位,所以用户请求的一个路径,如 http://ooxx.com/fuck/me ,这条URL打给路由之后,路由就会去解析,应该调用哪个function,最终返回结果给用户。

Laravel的路由采用闭包的方式返回结果,在 app/routes.php 中增加下列内容:

Route::get('admin/logout', array('as' => 'admin.logout', 'uses' => 'App\Controllers\Admin\AuthController@getLogout'));
Route::get('admin/login', array('as' => 'admin.login', 'uses' => 'App\Controllers\Admin\AuthController@getLogin'));
Route::post('admin/login', array('as' => 'admin.login.post', 'uses' => 'App\Controllers\Admin\AuthController@postLogin'));

Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function()
{
    Route::any('/', 'App\Controllers\Admin\PagesController@index');
    Route::resource('articles', 'App\Controllers\Admin\ArticlesController');
    Route::resource('pages', 'App\Controllers\Admin\PagesController');
});


前三条的意思是hold住两个get请求和一个post请求,下面是一个路由组,规定了一个前缀admin,增加了一个过滤器,auth.admin,内部有一个能同时适应get和post请求的‘/’路径,其完整路径是 http://ooxx.com/admin/。剩下的两个资源控制器本质上只是一种简写,URL和控制器类中的方法名的对应表见 资源控制器

上面说的那个过滤器 auth.admin,是Laravel提供的一个请求过滤器,这个文件就在路由文件的旁边,app/filters.php,在文件末尾增加:

Route::filter('auth.admin', function()
{
	if ( ! Sentry::check()) {
		return Redirect::route('admin.login');
	}
});

这样我们的权限验证就完成了。上面的代码意思是,在进入这个路由组中的任何一条路由之前,会先过一遍 auth.admin这个filter,这个filter会调用Sentry::check(),如果为false,将会进入if代码块,将用户的请求跳转到 命名路由‘admin.login’,命名路由文档从这个命名路由的名称大家也能看出来,就是跟访客说:傻逼,干啥呢,登录去~

这里的“命名路由”功能是为了模仿 Ruby On Rails 的 “link_to”到对象 的路由绑定功能,无奈PHP的上传即部署无守护进程的特性,使得我们没法维护一个全量代码的路由表,没法像Rails那样实现 资源路由-资源对象-路由调用 三者绑定的功能,只能搞出一个半成品命名路由,人为地解决了当调整 /people 到 /human 时,要求名称改变而功能不变,同时要求代码自适应的需求。


这时候,我们就可以尝试访问我们的项目了。推荐配置Apache将一个端口指向learnlaravel这个项目的public目录下,即项目通过 http://127.0.0.1:8080 这样的地址访问,十分不建议从子文件夹访问。如果你不会,可以运行

php artisan serve

启动PHP5.4的内建HTTP服务器。地址将会是 http://localhost:8000,注意此处 127.0.0.1 不可以访问。


下面,我们在浏览器中访问 /admin,注意URL会自动跳转到 /admin/login,这说明我们的filter起作用了,但你可能得到以下页面

QQ20141003-1.jpg


这说明代码出错了。接下来我们修改 app/config/app.php 第一项为:

'debug' => true,

刷新页面,错误提示出来了!有没有感觉Laravel4.2的错误提示很好看啊,确实不错,但我觉得没有4.1之前的好看 :-D。你会得到如下错误:


QQ20141003-2.png


说“App\Controllers\Admin\AuthController”这个类未找到,这是为什么呢?这个文件明明有啊。

这就涉及到了另一个问题,Laravel 中的 autoload 问题。这个类文件是存在的,而且顶部也声明了它所在的命名空间,还剩下最后一步:让 Laravel 知道。命令行运行:

composer dump-autoload

然后刷新页面,你会得到如下错误:

View [admin._partials.assets] not found. 

这是为什么呢?因为我们还没建立这个文件o(╯□╰)o。建立一个空文件即可,如果是用generator建的话,别忘了把里面默认的内容删掉哦。再刷新页面,如果还有问题,我相信这个问题你可以自己解决。

若手动建立相应的 view 文件后 Laravel 还是提示该文件未找到,可以尝试清空页面文件缓存,在 app/storage/views,清空该文件夹即可。


OK,一个丑的一逼的页面出现了,为什么它这么丑?(鸽子为什么这么大?)因为我们没有引入任何css和js文件,甚至连导航栏的html都不完整。这不要紧,来,按照我github上的代码,自己复制到相应文件中吧。另外,非常重要的一点,把我的项目中的public文件下的 js 和 css 两个文件夹完全复制到你们的public文件夹中。


再刷新,如果你看到以下页面,说明你成功了!

QQ20141003-2.jpg


3. 尝试登录

用seed新增一名管理员,顺便新增一个管理员组。新建 app/database/seeds/SentrySeeder.php,内容为:

<?php

class SentrySeeder extends Seeder {

  public function run()
  {
    DB::table('users')->delete();
    DB::table('groups')->delete();
    DB::table('users_groups')->delete();
 
    Sentry::getUserProvider()->create(array(
      'email'      => 'oo@xx.com',
      'password'   => "ooxx",
      'first_name' => 'OO',
      'last_name'  => 'XX',
      'activated'  => 1,
    ));
 
    Sentry::getGroupProvider()->create(array(
      'name'        => 'Admin',
      'permissions' => ['admin' => 1],
    ));
 
    // 将用户加入用户组
    $adminUser  = Sentry::getUserProvider()->findByLogin('oo@xx.com');
    $adminGroup = Sentry::getGroupProvider()->findByName('Admin');
    $adminUser->addGroup($adminGroup);
  }
}


给 app/database/seeds/DatabaseSeeder.php 新增一行:

$this->call('SentrySeeder');

然后运行:

php artisan db:seed

成功以后,进数据库就会发现,users、groups、users_groups表均新增了一行。但是,articles和pages表也分别新增了10行,对,seed就是这么蠢萌o(╯□╰)o。


让我们来尝试登录!如果你得到:

Class App\Controllers\Admin\PagesController does not exist


这说明你成功了!


接下来做什么?Laravel 4 系列入门教程(三)

WRITTEN BY

avatar
标签: PHP Laravel

评论:

qquu
2014-12-02 14:59
我始终卡在authcontroller不存在啊!!!求问怎么解决啊!!composer dump-autoload 之后还是如此啊。。链接是http://localhost:8000/admin/login
qquu
2014-12-02 11:32
http://localhost:8000/admin是AuthController does not exit界面,用了命令行composer dump-autoload之后还是提示AuthController does not exit界面,
然后我发现http://localhost:8000/phpmyadmin 的提示Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

请问怎么解决啊?
querry
2014-12-02 11:31
http://localhost:8000/admin是AuthController does not exit界面,用了命令行composer dump-autoload之后还是提示AuthController does not exit界面,
然后我发现http://localhost:8000/phpmyadmin 的错误提示Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

请问怎么解决啊?
querry
2014-12-02 11:31
http://localhost:8000/admin是AuthController does not exit界面,用了命令行composer dump-autoload之后还是提示AuthController does not exit界面,
然后我发现http://localhost:8000/phpmyadmin 的错误提示Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

请问怎么解决啊?新手入门求指导~~卡在这里两天了。。
JohnLui
2014-12-02 17:23
@querry:NotFoundHttpException 这就是 404 NOT FOUND
唐僧
2014-11-27 17:00
为什么是空白页
JohnLui
2014-11-27 17:05
@唐僧:空白页就是有PHP语法错误。
唐僧
2014-11-27 15:05
这个错误怎么解决:Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

Open: C:\wamp\www\myBlog\bootstrap\compiled.php
        if (!is_null($route)) {
            return $route->bind($request);
        }
        $others = $this->checkForAlternateVerbs($request);
        if (count($others) > 0) {
            return $this->getOtherMethodsRoute($request, $others);
        }
        throw new NotFoundHttpException();
    }
    protected function checkForAlternateVerbs($request)
JohnLui
2014-11-27 16:39
@唐僧:
这就是 404 NOT FOUND 的错误,路由没写这一条,这是正常的~
miffy
2014-12-03 15:48
@JohnLui:如果路由配置了,还是404 怎么办
Sevdr
2014-11-21 12:20
最后在执行php artisan db:seed时  只能给articles和pages两个表中插入数据,users,groups,users_groups均不可以,而且报错为:[ErrorException]                                                                          
  iconv_strlen(): Wrong charset, conversion from `8bit//IGNORE' to `UCS-4LE' is not allowed
把字段的编码都搞了一遍也还是这个样子
help!!!!!!!!
tomjemi
2014-11-25 20:27
@Sevdr:我跟你遇到同样的问题,在laravel的官方群348339842  里面解决的。 原因是是laravel要求的mbstring.dll扩展库没开启,在php.ini里开启extension=php_mbstring.dll,(去掉前面的;重启Apache)再次运行就不会报错了。
Alex
2014-11-20 19:28
  想问下 引用资源时用URL::asset和URL::to有什么区别吗 还有他们与直接以html引用写法相比的有没有什么优势?
JohnLui
2014-11-21 09:48
@Alex:asset是强制静态资源,to是动态链接,当你访问的URL最后是 /index.php 的时候,asset 生成的依然是 /css/main.css ,to 生成的就是 /index.php/css/main.css ,会失效。
yuanchao
2014-11-20 10:39
刚刚看了下源码,看到 getuser 这个方法挺像的,试了一下,果然是这个!
yuanchao
2014-11-20 10:30
您好,请问下 Sentry 怎么获取登陆后的用户信息呢?找了下文档,英文的,看得不是很明白
Jacob
2014-11-14 15:27
我的报这个错误,看起来是路由的错误,我路由已经添加了,而且,filter也配置了,实在看不明白了.

-----------
throw new NotFoundHttpException();
-----------------------------

Open: E:\xampp\htdocs\learnlaravel\bootstrap\compiled.php
        if (!is_null($route)) {
            return $route->bind($request);
        }
        $others = $this->checkForAlternateVerbs($request);
        if (count($others) > 0) {
            return $this->getOtherMethodsRoute($request, $others);
        }
        throw new NotFoundHttpException();
    }
    protected function checkForAlternateVerbs($request)
唐僧
2014-11-27 16:02
@Jacob:我也是一样的错误,,就是找不到
新学者
2014-11-13 15:17
View [admin._partials.assets] not found. (View: D:\web1\apache\htdocs\learnlaravel\app\views\admin\_layouts\default.blade.php) (View: D:\web1\apache\htdocs\learnlaravel\app\views\admin\_layouts\default.blade.php) 在我学习的路上,走到(刷新页面,错误提示出来了!有没有感觉Laravel4.2的错误提示很好看啊,确实不错,但我觉得没有4.1之前的好看 :-D。我得到了如下错误:)一步的时候,是这样了,怎么解决啊!
ilvsx
2014-11-12 02:34
之前的那个问题:
SQLSTATE[42S02]: Base table or view not found: Table 'homestead.users' doesn't exist (SQL: select * from `users` where `email` = sdfsadf limit 1)

今天解决了。为什么之前用 php artsian 命令写入数据库数据可行,而在登录账户时却连不上数据库?
因为环境不一样啊……我的 laravel 是泡在虚拟机上的。
本地运行的命令能连上服务器,因为我在 config/database.php 中设置的是 'host'  => '127.0.0.1:33060', 当然能连上,也能往数据库中成功添加数据,从第一个教程到登录之前都没有问题。
但是,在登录时候,运行的环境是虚拟机,需要连接的数据库也是虚拟机上的 localhost ,自然会提示连不上数据库了。
但是!如果把 'host'  => '127.0.0.1:33060' 改成  'host'  => 'localhost' 之后就能行了?很遗憾,依旧不行。
在查看了官方文档以及google一堆帖子之后,靠着google翻译找到了解决方法:
方法一:删掉 config/local/database.php
方法二:修改 config/local/database.php 文件为你的数据库连接配置
comfig/local文件夹下的同名文件设置会覆盖掉 config文件夹里的文件,详见: http://v4.golaravel.com/docs/4.2/configuration#environment-configuration

看了第一页也有两位朋友提出过同样的问题。不过,博主github上的 config/local/database.php 没删掉也没修改,就不知道为什么能跑起来了……
JohnLui
2014-11-12 09:11
@ilvsx:因为我没有配置 Environment ,没有添加所谓了 local 环境下的计算机名。这是必踩的坑,还是让大家踩踩吧
ilvsx
2014-11-13 00:30
@JohnLui:话说我仔细看了下您的 github 上的项目后,发现……其实你用的也是 config/local/database.php 的配置,昨天只是看了有没有删掉……没仔细看有没有修改,也许太晚了眼花没注意到……

这样的话你第一页的教程就有错了,第三点:
数据库配置文件位于 ./app/config/database.php,我们需要把“connections”中的“mysql”项改成我们需要的配置。

应该是:
config/local/database.php

然后再给大家解释下环境配置覆盖的问题,默认的环境是 local ,会自动加载 local 文件夹下的文件,然后覆盖掉相同的配置。
默认的环境是 local ,可以见:https://github.com/johnlui/Learn-Laravel-4/blob/master/bootstrap/start.php
JohnLui
2014-11-13 09:26
@ilvsx:你说的确实是你遇到的这个问题的原因,能钻研赞一个
但是我没有修改 local 文件夹下的文件,也没有写判断环境的代码,https://github.com/johnlui/Learn-Laravel-4/blob/master/bootstrap/start.php 这里面的判断 local 的代码是 Laravel 自带的。这三篇教程都没有用所谓的 homestead,你可以在每一篇都搜一下。我所讲的都是在自己的开发机上直接配置的结果。
你经过这次的钻研,对于环境选择应该就彻底明白了。
ilvsx
2014-11-01 02:43
最后一步登录时又卡住了……折腾了一晚上没结果,报错如下:

SQLSTATE[42S02]: Base table or view not found: Table 'homestead.users' doesn't exist (SQL: select * from `users` where `email` = sdfsadf limit 1)

正确的 sql 语句应该是 select × from 14_users where 。。。。  这样的才对。
不知道哪儿出问题了。
JohnLui
2014-11-01 02:56
@ilvsx:database prefix设置成 14_ 试一下。原文应该是 l4_ ,数字开头不一定可行。
ilvsx
2014-11-01 04:03
@JohnLui:l4.....我看成14了……不过为啥之前一直木有报错?往数据库写数据都没问题的啊。
我改回来试试先。
ilvsx
2014-11-01 04:08
@JohnLui:问题依旧,算了。。。睡了,明早起来推到重搞走起。
wait....博主93年?我的天。
ilvsx
2014-11-01 04:27
@JohnLui:需要PHP实习生么
html、css、js、php、mvc框架、smarty都学过了,目前属于刚入门的程度,希望能让自己快速锻炼出来。
求带走,求机会TAT

这是我邮箱:
xiangwanliang@gmail.com
JohnLui
2014-11-01 11:44
@ilvsx:暂时不需要
Awawa
2014-10-30 00:06
首先感谢教程,一步一步很详细!
关于“推荐配置Apache将一个端口指向learnlaravel这个项目的public目录下”,我目前设置了一个虚拟目录到‘public’目录,还是默认的80端口,直接打开,主页能正常访问“You have arrived.”,但加上admin以后直接就404了;通过’php artisan serve‘开启的8000端口服务器,就能访问admin,正常跳转。是为什么呢?
其实关于发布这块的逻辑我有点混乱,如果说‘public’里是最终发布的页面,views里面的页面是怎么被URL识别的呢?
JohnLui
2014-10-30 00:11
@Awawa:这是因为没有做伪静态所致。你可以尝试 127.0.0.1/index.php/admin ,应该就可以了。
Awawa
2014-10-30 08:44
@JohnLui:感谢John!
这个问题后来我通过搜索找到了解决方案,Laravel在部署的时候需要跨上一级目录访问(如果document root是www,laravel框架下的代码public里的东西放在www,其他的放在www同级),所以在目录访问权限上需要更宽松一些,httpd设置里
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All
问题是解决了,不知道我理解是不是对的。另外,对一个不存在的admin目录(我理解public里面是root),通过什么方式识别的,还是有点模糊,难道是.htaccess?
JohnLui
2014-10-30 13:18
@Awawa:关于权限你的做法应该是对的。Laravel 跟大多数框架一样是单入口的,任何非静态url都是会被交给 index.php 的, .htaccess 的作用就是实现它。
Salon.sai
2014-10-20 19:02
我有把css和js文件夹拉到我的public里面啊 但为什么还是没有引用到里面bootstrap和jquery的内容呢样子好丑陋啊
John·Lui
2014-10-20 21:21
@Salon.sai:看一下源代码,又不有没有这些文件?点击看可不可以访问?
Salon.sai
2014-10-27 15:17
@John·Lui:可以了 谢谢~我还有些小问题想问问。。我是做java开发的 看到你用view的时候是用php..而我们java web里面是尽量使用html+ajax避免服务器的开销。想您这样写php开发会对服务器开销有和大影响吗
JohnLui
2014-10-27 15:24
@Salon.sai:PHP 代码可以嵌入 HTML 页面中执行是 PHP 的根本特点和优势,会带来很高的开发效率。PHP 从诞生的第一天起就是嵌入 HTML 代码中执行的,PHP 解释器很擅长处理整个 HTML 页面。PHP 本身就是作为表现层使用的,在这个场景下没有性能问题,因为每一次访问结束后,内存资源会全部释放。
Salon.sai
2014-10-27 16:41
@JohnLui:谢谢你的解答!我是刚接触php...你的laravel教程我已经做了一遍了。能基本上看懂没一个步骤,但因为毕竟我没有php的基础,所以一些php嵌入html的代码(如@if,@yield这些。我就当作是jsp里面的标签或者el表达这样暂时理解),甚至连一些php的符号可能不知道。我只是粗浅的学了一下php...我想问问我应该如何重新学php呢?有什么推荐呢?谢谢
JohnLui
2014-10-27 17:06
@Salon.sai:我也不知道 %>_<%
kaige
2015-01-10 19:10
@John·Lui:作者你好,我也是把css和js文件夹拉倒我的public里面了,并且把admin的文件也替换成你给的了,但是样式始终没变。我看到asset.blad.php里引用是这样的<script src="{{ URL::asset('js/jquery-1.9.1.min.js') }}"></script>
<script src="{{ URL::asset('js/bootstrap.min.js') }}"></script>
<script src="{{ URL::asset('js/script.js') }}"></script>

<link href="{{ URL::asset('css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ URL::asset('css/bootstrap-responsive.min.css') }}" rel="stylesheet">
<link href="{{ URL::asset('css/main.css') }}" rel="stylesheet">
应该是没问题啊,怎么就是不能应用样式。疯了都快。
JohnLui
2015-01-10 21:14
@kaige:asset.blad.php 应该是 asset.blade.php。
另外用浏览器查看一下源代码,看链接是否正确,点击访问是否有错误。
kaige
2015-01-10 21:37
@JohnLui:看源代码,果然是没连接上,不知道是哪里出的问题?另外asset.blade.php是我笔误。不知道你有什么见解,搞不明白,都是按照你给的步骤来的。
梦逍遥
2014-10-15 16:00
http://localhost:8000/admin/login  我的这个界面是空白
官方文档弄的http://localhost:8000/users就有东西,不是空白,但是我想看看你这个到最后到底是什么样子    到这里卡住了!
John·Lui
2014-10-15 18:33
@梦逍遥:就是“再刷新,如果你看到以下页面,说明你成功了!”下面那张图的样子。页面空白应该是 PHP 有语法错误。
唐僧
2014-11-27 15:57
@John·Lui:我的报错好奇葩,,,直接报错,,Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException
Chuang
2014-10-15 10:02
Class 'Sentry' not found  给我报了个错误,说这个类找不到,在那个过滤器里面!
John·Lui
2014-10-15 10:15
@Chuang:那就是找不到,最大的可能是没有配置 Sentry,在 app/config/app.php 里面。
梦逍遥
2014-10-12 23:01
View [admin._layouts.default] not found.和你的不一样,是你的写错了吧    但是我创建了这个文件    刷新之后页面是空白呢
John·Lui
2014-10-12 23:12
@梦逍遥:app/views/admin/_layouts/default.blade.php 最后的文件名确实写错了,感谢指正! :-D
初学者
2014-10-08 14:18
在配置路由这一块,  Route::any('/', 'App\Controllers\Admin\PagesController@index');这个PagesController文件没有吧,我运行了后 总是提示路由出错~新手求教育~
John·Lui
2014-10-08 19:06
@初学者:请按照教程一步一步来,你会发现问题的。

发表评论:

© 2011-2019 岁寒  |  Powered by Emlog