路线组问题

时间:2014-04-11 12:48:10

标签: php laravel

以下是我的路由文件的一部分。但是,每当我访问/recipe/recipe/{id}网址时,我都会收到错误

  

无法重新宣布课程食谱。

Recipe是我的模型btw的名称。

Route::group(array('before' => 'auth'), function(){
    Route::any('/logout', 'LoginController@actionLogout');
    Route::get('/recipe/add', 'RecipeController@showAdd');
    Route::post('/recipe/add', 'RecipeController@actionAdd');
});
Route::any('/', 'HomeController@actionHome');
Route::get('/recipe', 'RecipeController@showIndex');
Route::get('/recipe/{id}', 'RecipeController@showItem');

如果我将路由文件更改为低于该错误,则不再出现错误。但是,网址显然受到' =>' auth'之前的影响。这意味着它只能由登录的人访问。

Route::group(array('before' => 'auth'), function(){
    Route::any('/logout', 'LoginController@actionLogout');
    Route::get('/recipe/add', 'RecipeController@showAdd');
    Route::post('/recipe/add', 'RecipeController@actionAdd');
    Route::any('/', 'HomeController@actionHome');
    Route::get('/recipe', 'RecipeController@showIndex');
    Route::get('/recipe/{id}', 'RecipeController@showItem');
});

我是否使用了错误的群体,或者我错过了什么。

修改 控制器文件如下:

<?

class RecipeController extends BaseController
{

    protected $layout = 'layouts.home';

    public function showIndex()
    {
        $this->layout->content = View::make('recipe.index')->with('recipes', Recipe::paginate(15));
    }

    public function showAdd()
    {
        $this->layout->content = View::make('recipe.add');
    }

    public function actionAdd()
    {
        $recipe = new Recipe;
        $recipe->creator = Auth::user()->id;
        $recipe->title = Input::get('name');
        $recipe->serves = Input::get('serves');
        if (Input::hasFile('image')){
            $fileName = date('m_d_Y_h_i_s_a', time()).'__'.str_replace(' ', '', Input::file('image')->getClientOriginalName());
            Input::file('image')->move('uploads', $fileName);
            $recipe->image = $fileName;
        }
        $recipe->save();
        Log::info(Input::get('method'));
        foreach (Input::get('method') as $index => $item){
            $method = new MethodItem();
            $method->content = $item;
            $method->order = $index;
            $recipe->Method()->save($method);
        }
        return Redirect::to('/recipe')->with('message','Wrong Username or Password');
    }

    public function showItem($id)
    {
        $recipe = Recipe::findOrFail($id);
        $this->layout->content = View::make('recipe.item')->with('recipe', $recipe);
    }

}

模特:

<?php

class Recipe extends Eloquent{

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'recipes';

    public function Creator()
    {
        return $this->belongsTo('User', 'creator');
    }
    public function Method(){
        return $this->hasmany('MethodItem', 'recipe')->orderBy('order');
    }   

}

修改2

Laravel(或作曲家)自动加载器的工作方式似乎存在问题。似乎在控制器运行时,配方模型尚未实例化,如class_exists('Recipe', false)所检测到的那样。但是,当我运行class_exists('Recipe', true)时,会发生错误。

EDIT3

所以我找到的排序或答案是重命名配方类(和文件名,以及对它的所有引用)。然后我不得不创建一个名为recipe.php的空白文件。这感觉非常hacky,但它的工作原理我现在要坚持下去。我想知道控制器是否需要与Eloquent模型完全分开?

2 个答案:

答案 0 :(得分:0)

解决方案是重新生成自动加载文件。对我来说,我刚刚跑了composer dump-autoload -o。某些用户可能需要composer dump-autoload

非常感谢user2094178提供解决方案。

答案 1 :(得分:-1)

答案很简单。您已经声明了Recipe课程。它与您的路线文件无关;所以别再去找那里了。使用查询&#34; class Recipe&#34; 搜索整个项目。